JSF 2.2复合组件EditableValueHolder

时间:2015-08-25 14:10:25

标签: jsf-2 composite-component

我正在编写一个包含 double myDoubleValue = 10.2; int myIntValue1 = (int)(myDoubleValue * 100 + 0.5); // note "+ 0.5" System.out.println(myIntValue1); 的复合组件,我希望通过放置<h:selectManyMenu>和{{1}来允许此组件的客户端提供验证器和转换器}标签作为我的复合组件标签的子项。在我的复合界面部分,我有

<f:validator>

并在实施部分中:

<f:converter>

最后用法:

<composite:editableValueHolder name="select-input" targets="select-many" />

问题既不是验证器也不是转换器。我还有验证器和转换器类,每个类分别用<h:selectManyMenu id="select-many" styleClass="hidden select-input" value="#{cc.attrs['value']}" binding="#{cc.inputComponent}"> <composite:insertChildren /> </h:selectManyMenu> <cwi:selectManyMenu id="select-many-menu" value="#{selectManyBean.selectedItems}"> <f:converter converterId="converter.testItem" for="select-many" /> <f:validator validatorId="validator.testItem" for="select-input" /> <f:selectItems value="#{selectManyBean.possibleItems}" var="item" itemValue="#{item}" itemLabel="#{item.description}" /> </cwi:selectManyMenu> 注释。它们正在被正确拾取,因为如果我在复合组件内部移动@FacesValidator('validator.testItem')@FacesConverter("converter.testItem")标签,<f:validator>下方的一切正常,但我宁愿将这些标记暴露给客户端而不是硬编码他们。有没有关于insertChildren在使用editableValueHolder时的工作方式?为了实现这一点,我可以将转换器和验证器ID作为接口的一部分,但是这会将属性传递给转换器和验证器失去一些灵活性。

1 个答案:

答案 0 :(得分:2)

我正在使用Mojarra 2.2.8-jbossorg-1。除了现在明显的拼写错误之外,我还应该包含更多复合组件的xhtml。我使用了一个支持组件,没有支持组件,一旦我修正了拼写错误,一切正常,但是当我添加了支持组件时,验证器和转换器停止工作。

在这里查看了wiki页面的复合组件https://stackoverflow.com/tags/composite-component/info后,我意识到复合组件的支持组件与自定义组件的类不同。对于复合组件,它们应始终只是扩展UINamingContainer。我的错误,特别是这个selectManyMenu,是我的支持组件扩展UISelectMany。