Primefaces と MyFaces を使用しています。selectBooleanButton コンポーネントを使用して、長く複雑なフォーム内の他のコンポーネントの可視性を制御したいと考えています。
簡略化されたサンプル コード:
<p:selectBooleanButton
onLabel="Comment" offLabel="Comment"
onIcon="ui-icon-check" offIcon="ui-icon-close"
value="#{not empty myBean.comment}"
onchange="toggleDisplay(this.checked,'myForm:commentPanel');" />
<h:panelGroup id="commentPanel"
style="display:#{empty myBean.comment ? 'none' : 'block'}">
<p:inputTextarea value="{myBean.comment}"/>
</h:panelGroup>
onchange 属性の JavaScript は、表示スタイルをなしからブロックに、またはその逆に単純に切り替えて、パネル グループを非表示または非表示にします。コンポーネントをビューに残しておきたい/必要があります。レンダリングされた属性を使用してコンポーネントを完全に削除したくありません。
問題が発生するのは、setBooleanButton コンポーネントの value 属性で使用される EL コンストラクトが原因です。この EL ステートメントは set 操作と互換性がなく、これにより例外が発生することは認識しています。
私ができるようにしたいのは、フォームがロードされたとき、selectBooleanButton コンポーネントの初期ステータスを、コメント プロパティに既存のテキストがある場合は「オン」に設定し、空の場合は「オフ」に設定することです。パネルを非表示にするインスタンスごとにモデルにプロパティを作成する必要がない、これを回避する方法を探しています。これらのコメント セクションの多くで非常に大きいです。