例如,f:selectItems
在某些版本的JSF中,该组件不支持title属性。
是否可以使用JSFC将JSF组件替换为纯HTML对应的组件,并执行类似的操作?
<select jsfc="h:selectOneMenu" value="#{cc.data}">
<option jsfc="f:selectItems" value="${cc.listItems}" var="item" title="#{item.tooltip}"></option>
</select>
代替
<h:selectOneMenu value="#{cc.data}">
<f:selectItems value="#{cc.listItems}" />
</h:selectOneMenu>
正是这样做的,用上面的替换后者,我得到了"<f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlPanelGroup"
Facelet TagExceptions
是否有可能使用JSFC将JSF组件替换为纯HTML对应的组件,并执行类似的操作
没有。最终,这种带有jsfc
属性的HTML元素将在JSF组件树中变成一个真正的JSF组件,并且只有该组件所支持的属性才能被解析并设置为组件属性。该title
属性不在UISelectItem
组件支持的属性之中。我不确定“某些JSF版本”到底是什么意思。首先,标准的JSF API已经不支持它。JSF规范问题529描述了此缺点,并且目前仍然开放。
如果您使用的是JSF 2.2,请使用传递属性。您只需要替换<f:selectItems>
为<c:forEach><f:selectItem>
,另请参见在passtrough属性中使用f:selectItems var
<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
<c:forEach value="#{bean.items}" var="item">
<f:selectItem itemValue="#{item}" a:title="#{item.tooltip}" />
</c:forEach>
根据您的问题历史记录,您似乎尚未使用JSF 2.2。如果您无法升级,则基本上需要为定制渲染器<h:selectOneMenu>
。创建自定义渲染器时,可以使用该类的未使用的(!)description
属性UISelectItem
。我之前针对一个类似的问题回答了这个问题<p:selectManyCheckbox>
:p:selectManyCheckbox的Primefaces工具提示。
<f:selectItems ... var="item" itemDescription="#{item.tooltip}" />
应该注意的是,创建自定义渲染器<h:selectOneMenu>
很麻烦,特别是如果您打算独立于JSF实现。从理论上讲,一个风俗ResponseWriter
应该能够捕捉到这一点,但是不幸的是,<h:selectOneMenu>
在编写时<option>
,只有风俗会通过本身,而不是有UISelectItem
问题的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句