如何将工具提示添加到f:selectItems

use*_*015 8 jsf tooltip selectonemenu

例如,f:selectItems组件在某些版本的JSF中不支持title属性.

是否可以使用JSFC替换纯HTML对应的JSF组件并执行类似的操作?

   <select jsfc="h:selectOneMenu" value="#{cc.data}">
     <option jsfc="f:selectItems" value="${cc.listItems}" var="item" title="#{item.tooltip}"></option>
   </select>
Run Code Online (Sandbox Code Playgroud)

代替

   <h:selectOneMenu value="#{cc.data}">
     <f:selectItems value="#{cc.listItems}" />
   </h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

完全如此,用上面的替换后者,我得到了"<f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlPanelGroup"Facelet TagExceptions

Bal*_*usC 11

是否可以使用JSFC替换纯HTML对应的JSF组件,并执行类似的操作

不.最终,具有jsfc属性的这种HTML元素将变成JSF组件树中的真正JSF组件,并且解析所讨论的组件所支持的属性并将其设置为组件属性.该title属性不属于UISelectItem组件支持的属性.我不确定你对"某些版本的JSF"究竟是什么意思.标准的JSF API已经不支持它了.JSF规范问题529描述了这个缺点,目前仍然是开放的.

如果您使用的是JSF 2.2,请使用passthrough属性.您只需要替换<f:selectItems><c:forEach><f:selectItem>,另请参阅使用f:selectItems var in passtrough属性

<... 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>
Run Code Online (Sandbox Code Playgroud)

根据您的问题历史,您似乎还没有使用JSF 2.2.如果无法升级,则基本上需要自定义渲染器<h:selectOneMenu>.在创建自定义渲染器时,您可以使用该类的未使用(!)description属性UISelectItem.之前我在针对以下问题的类似问题上回答了这个问题<p:selectManyCheckbox>:p:selectManyCheckbox的Primefaces工具提示.

<f:selectItems ... var="item" itemDescription="#{item.tooltip}" />
Run Code Online (Sandbox Code Playgroud)

值得注意的是,创建自定义渲染器<h:selectOneMenu>非常困难,特别是如果您打算独立于JSF实现.从理论上讲,一个习惯ResponseWriter应该能够捕捉到这一点,但不幸的是,<h:selectOneMenu>只有在写作时,它才会自行传递<option>,而不是UISelectItem问题.