如何将工具提示添加到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