我正在创建一个由 selectOneListbox 和几个 selectManyCheckboxes 组成的复合组件。用户将看到这些输入,一旦他们做出选择,这些组件的值将被组合以产生一个格式化的字符串输出,这是该复合组件的“值”。目前我的复合组件如下所示,当用户提交表单时,如何将格式化的输出字符串绑定到复合组件的值?
我将 Primefaces 与 JSF 一起使用,但我认为解决方案(无论它是什么)应该能够适用于其中任何一个。
复合组件:
当用户在屏幕上进行选择时,格式化的字符串会显示给用户。这是通过对 outputText 的 ajax 更新来完成的formattedOutput
。我在 CC 的底部添加了一个隐藏的输入。这个想法是我将使用 javascript 来设置formattedOutput
它更新时的新值,但我不确定如何。
<composite:interface>
<composite:attribute name="value" required="true"/>
</composite:interface>
<composite:implementation>
<div id="#{cc.clientId}">
<h:outputLabel value="Current Formatted Output" for="formattedOutput"/>
<h:outputText value="#{backingBean.formattedOutput}" id="formattedOutput"/>
<p:outputLabel value="First Input" for="input1"/>
<p:selectOneListbox id="input1" required="true" value="#{backingBean.input1}">
<f:selectItems value="#{staticControlsData.options1}"/>
<p:ajax event="change" update="formattedOutput" listener="#{backingBean.buildFormattedOutputString}"/>
</p:selectOneListbox>
<p:outputLabel value="Second Input" for="input2"/>
<p:selectManyCheckbox id="input2" value="#{backingBean.input2}">
<f:selectItems value="#{staticControlsData.options2}"/>
<p:ajax event="change" update="formattedOutput" listener="#{backingBean.buildFormattedOutputString}"/>
</p:selectManyCheckbox>
<h:inputHidden id="hiddenValue" value="#{cc.attrs.value}"/>
</div>
</composite:implementation>
这就是我希望使用复合组件的方式:
<h:form>
<my:component value="#{anotherBean.aField}" />
<p:commandButton value="Save" />
<p:commandButton value="Cancel" immediate="true"/>
</h:form>