1

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 コンポーネントの初期ステータスを、コメント プロパティに既存のテキストがある場合は「オン」に設定し、空の場合は「オフ」に設定することです。パネルを非表示にするインスタンスごとにモデルにプロパティを作成する必要がない、これを回避する方法を探しています。これらのコメント セクションの多くで非常に大きいです。

4

1 に答える 1

1

また、この質問をPrimefacesフォーラムに投稿しましたが、そこでも回答がありませんでした。そのため、現時点では、この問題に対する優れた解決策がないか、少なくとも共有されている解決策がない可能性があります。これを回避するために私がやったことは、コンポーネントの2つのバージョンを作成し、レンダリングされた属性を使用して、次のようにどちらを使用するかを制御することです。

<p:selectBooleanButton 
     onLabel="Comment" offLabel="Comment" 
     onIcon="ui-icon-check" offIcon="ui-icon-close"
     value="true" rendered="#{not empty myBean.comment}"
     onchange="toggleDisplay(this.checked,'myForm:commentPanel');" /> 

<p:selectBooleanButton 
     onLabel="Comment" offLabel="Comment" 
     onIcon="ui-icon-check" offIcon="ui-icon-close"
     value="false" rendered="#{empty myBean.comment}"
     onchange="toggleDisplay(this.checked,'myForm:commentPanel');" /> 
于 2012-12-10T18:31:07.987 に答える