0

我想为h:selectOneMenu组件编写一个自定义渲染器,并最终利用该类的description属性UISelectItem添加一个title又名工具提示,以遵循https://stackoverflow.com/a/25512124/3280015http://baluscf:selectItems中的 BalusC 的深刻指南.blogspot.de/2008/08/styling-options-in-hselectonemenu.html

现在我确实com.sun.faces.renderkit.html_basic.MenuRenderer在自己的 中扩展了,CustomMenuRendererfaces-config.xmlrenderOptionResponsewriter

String titleAttributeValue = (String) component.getAttributes().get("title");
if (titleAttributeValue != null) {
    String indexKey = component.getClientId(context)
            + "_currentOptionIndex";
    Integer index = (Integer) component.getAttributes().get(indexKey);
    if (index == null) {
        index = 0;
    }
    component.getAttributes().put(indexKey, ++index);
}

我不太确定我做对了,indexKey或者我是否需要它作为 title 属性,或者应该使用 awriter.writeAttribute("title", titleAttributeValue, null);代替,因为我没有像 optionClasses 教程中那样的列表,但代码到目前为止有效!

在实际的视图定义用例中,我做了:

<h:selectOneMenu value="#{cc.data}">                    
  <f:attribute name="title" value="outerTEST" />
  <c:forEach items="#{cc.list}" var="val">
    <f:selectItem value="#{val}" itemValue="#{val}" itemLabel="#{val.label}">
      <f:attribute name="title" value="innerTEST #{val.description}" />
    </f:selectItem>
  </c:forEach>                      
</h:selectOneMenu>

(我只是把#{val.description}那里的标题值澄清我的意图,它目前仍然是空的,我将不得不考虑稍后如何填充每个元素,但为了这个问题,我们可以假设它已经被填充。 )

但是现在我"outerTEST"在浏览器中生成的 XHTML 中的选项的标题属性中得到了正确显示,但我没有看到任何"innerTEST"应该和应该是个人的,selectItem而这最终是关于.

我了解f:selectItemandf:selectItems组件没有自己的渲染器,但选项的渲染通常由MenuRenderervia 其renderOption方法处理。

但是,我将如何将单独的标题添加到单独的 selectItems 中?

谢谢

4

0 回答 0