1

selectOneRadioがあり、ブール値に応じてパネルを表示したい(または表示したくない)(a4jを使用したイベント後の基本的な再レンダリング)。ブール値とのバインディングは良好であり、アクションは、クリックするとブール値が変化することを確認します。

これが私のselectOneRadio

<h:selectOneRadio  value="#{myController.myBoolean}">
    <a4j:support event="onclick" action="#{...}"  reRender="myPanel" />
        <f:selectItem itemLabel="Yes" itemValue="#{true}"/>
        <f:selectItem itemLabel="No" itemValue="#{false}"/>
</h:selectOneRadio> 

属性を使用した後にreRenderが機能しないのはなぜですかrendered(効果なし):

<a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">...

一方、style属性を使用して、可視性を変更することで機能します。

<a4j:outputPanel id="myPanel"  style="#{myController.myBoolean ? 'visibility:visible;':'display:none;'}">...
  • Richfaces3.3.3。ファイナル
  • すべてのブラウザで同じバグ
4

1 に答える 1

2

この問題は以下のように説明できます。最初は、rendered属性がに設定されているため、パネル「myPanel」はレンダリングされませんfalse。次に、コンポーネントtrueを選択して、レンダリングされた値をに変更します。selectOneRadio次に、タグでreRender使用して「myPanel」に移動reRender="myPanel"します。 ただし、残念ながら、ページにそのような要素がないため(レンダリングされていないため)、再レンダリングされる「myPanel」はありません。a4j:support

この問題は、「myPanel」の親を再レンダリングすることで解決できます。たとえば、「myPanel」にpanel次のような親がある場合、

<a4j:outputPanel id="parentPanel">
    <a4j:outputPanel id="myPanel"  rendered="#{myController.myBoolean}">
           .......
    </a4j:outputPanel>
</a4j:outputPanel>

reRender、以下のように親

<a4j:support event="onclick" action=#{...}"  reRender="parentPanel" />

注:属性のvisibility代わりに変更するrenderedと、「myPanel」は非表示になっていますが、ページで引き続き使用できるため、機能します。

于 2012-12-07T16:57:05.890 に答える