ドロップダウンに基づいて、条件付きでレンダリングされるフィールドがあります。それはすべて問題なく行われますが、新しくレンダリングされたコンポーネントが含まれるフォームを送信すると、送信されません。
コードはかなり単純です。
<h:form id="form">
<p:layout id="layout">
...
<p:layoutUnit id="layoutUnit">
...
<p:panel id="panel">
<p:outputPanel id="container1">
<p:selectOneMenu id="value1" value="#{bean.value1}">
<f:selectItem itemValue="1"/>
<f:selectItem itemValue="2"/>
<f:selectItem itemValue="3"/>
<f:selectItem itemValue="18"/>
<p:ajax event="change" update="container2"/>
</p:selectOneMenu>
</p:outputPanel>
<p:outputPanel id="container2">
<p:inputText id="value2"
value="#{bean.value2}"
rendered="#{bean.value1 eq 18}"
>
</p:inputText>
</p:outputPanel>
</panel>
<div id="buttons">
<p:commandButton id="commandButton" action="#{bean.save}" value="save" />
</div>
</layoutUnit>
</layout>
</form>
可能な解決策を試しました:
- JSFの@ViewScopedはCDIと衝突するので使えない
この動作を引き起こすいくつかのシナリオを考えることができます。
- 「レンダリング済み」は、UI で指定された新しい値ではなく、バッキング Bean の値に基づいて再評価されるようです (デフォルトで 1 に設定されている場合、送信時に 18 ではなく 1 になります)。したがって、コンポーネントは送信されません。
- 追加されたコンポーネントがフォームに正しく追加されていないため、送信されません。
- ?
オプション1が最も可能性が高いようですが、誰かが私を正しい方向に向けることができますか?
私は WAS8.5 (つまり JSF2.0)、Primefaces、および CDI を使用しています。