如何将工具提示添加到f:selectItems
例如,在某些版本的JSF中, f:selectItems
组件不支持title属性。
是否有可能通过使用JSFC的纯HTML对应replaceJSF组件,并做这样的事情?
<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>
这样做,replace上述后者,我得到"<f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlPanelGroup"
ValueHolder "<f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlPanelGroup"
Facelet TagExceptions
是否有可能通过使用JSFC替代JSF组件,并使用JSFC做类似的事情
不。 最终,具有jsfc
属性的这种HTML元素将变成JSF组件树中的一个真正的JSF组件,并且只有被讨论的组件支持的属性才会被parsing并设置为组件属性。 title
属性不在UISelectItem
组件的支持属性之中。 我不确定你的意思是什么“一些版本的JSF”。 标准的JSF API已经不支持它了。 JSF规范问题529描述了这个缺点,目前仍然是开放的。
如果您使用的是JSF 2.2,请使用直通属性。 您只需要通过<c:forEach><f:selectItem>
replace<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>
的自定义渲染器。 在创build自定义渲染器时,可以使用UISelectItem
类的未使用(!) description
属性。 我已经回答了这个针对<p:selectManyCheckbox>
的类似问题: Primefaces tooltip for p:selectManyCheckbox 。
<f:selectItems ... var="item" itemDescription="#{item.tooltip}" />
值得注意的是,为<h:selectOneMenu>
创build自定义渲染器是一个痛苦,特别是如果你打算独立于JSF实现。 理论上,一个自定义的ResponseWriter
应该能够捕捉到这个,但不幸的是, <h:selectOneMenu>
只在写入<option>
时传递,而不是UISelectItem
。