gpt4 book ai didi

jsf-2 - 使用f :selectItems var in passtrough attribute

转载 作者:行者123 更新时间:2023-12-04 13:49:24 24 4
gpt4 key购买 nike

可以将表达式传递给JSF 2传递属性吗?
以下代码无法正常工作。不评估表达式#{country.isoCode}

<h:selectOneMenu value="#{bean.selectedCountry}" styleClass="selectlist">
<f:selectItems
value="#{bean.countries}" var="country"
itemLabel="#{country.countryName}"
pt:data-icon="flag flag-#{country.isoCode}"/>
</h:selectOneMenu>

我正在使用命名空间
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"

和引导选择。属性“数据图标”用于显示图像。看:

http://silviomoreto.github.io/bootstrap-select/#data-icon

呈现的输出:
<i class="glyphicon flag flag-"></i> 

最佳答案

基本上,Facelet模板中的所有位置都支持/评估EL。外部标签/属性。即使在HTML注释中,也有很多入门者倒下。所以那不是问题。

不幸的是,您的特殊情况是“设计使然”。在呈现第一个<option>元素之前,仅对<f:selectItems>进行一次完整解析,然后将其转换为迭代器,在此期间将评估所有EL表达式。然后,该组件将在渲染<option>元素时对其进行迭代,在此期间将评估所有传递属性。但是,由于var在创建迭代器时已经进行了评估,因此在呈现传递属性期间它在任何地方都不可用,并最终评估为空字符串。

要解决该问题,需要对<f:selectItems>的标准JSF实现进行一些更改。我不确定JSF的家伙是否会为此留心,但是您可以随时尝试create an issue

您可以通过在<f:selectItem>的帮助下在 View 构建期间实际创建多个<c:forEach>实例来解决此问题。

<h:selectOneMenu ...>
<c:forEach items="#{bean.countries}" var="country">
<f:selectItem
itemValue="#{country}"
itemLabel="#{country.countryName}"
pt:data-icon="flag flag-#{country.isoCode}" />
</c:forEach>
</h:selectOneMenu>

也可以看看:
  • JSTL in JSF2 Facelets... makes sense?
  • 关于jsf-2 - 使用f :selectItems var in passtrough attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671305/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com