selectOneListbox といくつかの selectManyCheckboxes で構成される複合コンポーネントを作成しています。ユーザーにはこれらの入力が表示され、選択が完了すると、これらのコンポーネントの値が組み合わされて、この複合コンポーネントの「値」である書式設定された文字列出力が生成されます。現在、複合コンポーネントは以下のようになっていますが、ユーザーがフォームを送信するときに、フォーマットされた出力文字列を複合コンポーネントの値にバインドするにはどうすればよいですか?
私は JSF と一緒に Primefaces を使用していますが、ソリューション (それが何であれ) はどちらにも適用できるはずです。
複合コンポーネント:
ユーザーが画面上で選択を行うと、書式設定された文字列が表示されます。これは、 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>