在 passtrough 属性中使用 f:selectItems var
Using f:selectItems var in passtrough attribute
我可以将表达式传递给 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"
和bootstrap-select。属性 "data-icon" 用于显示图像。见:
http://silviomoreto.github.io/bootstrap-select/#data-icon
渲染输出:
<i class="glyphicon flag flag-"></i>
EL 基本上是 supported/evaluated Facelet 模板中的所有位置。也在tags/attributes之外。即使在 HTML 评论中,许多初学者也会失败。所以这不是问题。
不幸的是,您的具体情况是 "by design"。 在 呈现第一个 <option>
元素之前,<f:selectItems>
仅被完全解析一次并变成一个迭代器,在此期间将计算所有 EL 表达式。然后,组件将在呈现 <option>
元素时对其进行迭代,在此期间将评估所有直通属性。但是,由于 var
在创建迭代器期间 已经 求值,因此在呈现直通属性期间它在任何地方都不可用,最终求值为空字符串。
修复需要对 <f:selectItems>
的标准 JSF 实现进行相当多的更改。我不确定 JSF 的人是否会为此洗耳恭听,但你总是可以尝试 create an issue.
您可以在 <c:forEach>
.
的帮助下,在视图构建期间创建物理上的多个 <f:selectItem>
实例来解决此问题
<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 直通属性吗?
以下代码不起作用。表达式 #{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"
和bootstrap-select。属性 "data-icon" 用于显示图像。见:
http://silviomoreto.github.io/bootstrap-select/#data-icon
渲染输出:
<i class="glyphicon flag flag-"></i>
EL 基本上是 supported/evaluated Facelet 模板中的所有位置。也在tags/attributes之外。即使在 HTML 评论中,许多初学者也会失败。所以这不是问题。
不幸的是,您的具体情况是 "by design"。 在 呈现第一个 <option>
元素之前,<f:selectItems>
仅被完全解析一次并变成一个迭代器,在此期间将计算所有 EL 表达式。然后,组件将在呈现 <option>
元素时对其进行迭代,在此期间将评估所有直通属性。但是,由于 var
在创建迭代器期间 已经 求值,因此在呈现直通属性期间它在任何地方都不可用,最终求值为空字符串。
修复需要对 <f:selectItems>
的标准 JSF 实现进行相当多的更改。我不确定 JSF 的人是否会为此洗耳恭听,但你总是可以尝试 create an issue.
您可以在 <c:forEach>
.
<f:selectItem>
实例来解决此问题
<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?