我正在创建一个复合组件,它由selectOneListbox和几个selectManyCheckboxes组成 . 将向用户呈现这些输入,并且一旦他们做出选择,这些组件的值将被组合以产生格式化的字符串输出,该输出是该复合组件的“值” . 目前我的复合组件看起来如下所示,当用户提交表单时,如何将格式化的输出字符串绑定到复合组件的值?
我正在使用Primefaces和JSF,但我认为解决方案(无论它是什么)应该能够适用于任何一种 .
复合组件:
当用户在屏幕上进行选择时,格式化的字符串将显示给用户 . 这是通过对outputText formattedOutput
的ajax更新完成的 . 我在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>
1 回答
将此脚本添加到复合组件:
而你的两个
<p:ajax>
添加oncomplete="ajaxUpdateComplete"
因此,在隐藏字段的每个ajax调用值将被更新并准备好与表单一起发布之后,您的复合组件将放入