如何使用f:属性组件向没有自己的渲染器的组件添加属性?

时间:2014-08-27 17:37:11

标签: jsf selectonemenu custom-renderer

我想为h:selectOneMenu组件编写自定义渲染器,并最终使用description类的UISelectItem属性将title aka工具提示添加到{ {1}}遵循BalusC在https://stackoverflow.com/a/25512124/3280015http://balusc.blogspot.de/2008/08/styling-options-in-hselectonemenu.html中的深刻指南。

现在我确实在f:selectItems扩展了com.sun.faces.renderkit.html_basic.MenuRenderer,用CustomMenuRenderer注册了它并覆盖了faces-config.xml方法,在选项标记终止之前添加了以下代码由renderOption

Responsewriter

我不太确定我正在做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); } 这件事,或者我是否需要它作为title属性,或者应该使用indexKey代替因为我没有像optionClasses教程,但代码到目前为止工作!

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

writer.writeAttribute("title", titleAttributeValue, null);

(我只是将<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> 放在标题值中以澄清我的意图,它目前仍然是空的,我将不得不考虑如何在每个元素后填充它,但为了问题我们可以假设它已经填满了。)

但是现在我正在浏览器中生成的XHTML中的#{val.description}正确显示选项的title属性,但我没有看到"outerTEST"中的任何一个"innerTEST"每个selectItem应该是个人,这最终是关于这一点的。

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

但是,如何将个别标题添加到各个selectItems?

由于

0 个答案:

没有答案