0

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>
4

1 に答える 1