1

rich:toggleControlコンポーネントをラジオ ボタン コンポーネント ( h:selectOneRadio) またはその子の選択項目 (この場合は) にアタッチすることに成功した人はいますかs:enumItem

基本的なコード例:

<h:selectOneRadio value="#{backingValue}">
   <s:enumItem enumValue="VAL_1" itemLabel="Value One" />
   <s:enumItem enumValue="VAL_2" itemLabel="Value Two" />
   <s:convertEnum />
</h:selectOneRadio>

理想的なのは、トグル コントロールをs:enumItems にアタッチして、特定の状態に切り替えることができるようにすることです。ただし、この時点で、トグル コントロールを にアタッチできれば幸いですh:selectOneRadioh:selectOneRadioとの子としてトグル コントロールを試しましたs:enumItem。どちらも機能しません。この場合、トグルh:selectOneRadioコントロールは機能しますが、ラジオ ボタンは機能しません。

4

2 に答える 2

2

rich:togglePanel をバッキング Bean の同じ値に関連付け、a4j サポート タグを使用して値を更新し、パネルを再レンダリングします。

覚えておくべきことの 1 つは、rich:togglePanel の #value 属性が文字列に解決される必要があるため、おそらく #{backingValue.name()} にバインドする必要があることです (誰かがオーバーライドする可能性があるため、toString() を使用しないでください)。後であなたにそれを...)

このようなものはうまくいくはずです:

<h:selectOneRadio id="radioButtons" value="#{backingValue}">
   <a4j:support event="onclick" 
                ajaxSingle="true" 
                reRender="radioButtons, togglePanel"/>

   <s:enumItem enumValue="VAL_1" itemLabel="Value One" />
   <s:enumItem enumValue="VAL_2" itemLabel="Value Two" />
   <s:convertEnum />
</h:selectOneRadio>


<rich:togglePanel id="togglePanel" 
                  switchType="ajax"
                  value="#{backingValue.name()}" >

   <f:facet name="VAL_1">
      <h:outputText value="Selected enum value 1"/>
   </f:facet>

   <f:facet name="VAL_2">
      <h:outputText value="Selected enum value 2"/>
   </f:facet>
</rich:togglePanel>

ajax サポート イベント バインディングも試してみる必要があるかもしれません。AJAX4JSF が関係している場合、ラジオ ボタンを使用した「onchange」および「onselect」イベントが少し不安定になる可能性があることがわかりました。私は文字列でこれを行いました。ここでは、バッキング Bean のアクションが値を設定することでトグル パネルの状態を変更しますが、列挙型でも動作する必要があります。

于 2009-08-11T23:08:46.027 に答える
0

これは私の上記の質問に対する厳密な回答ではありませんが、上記の「より良い」方法を理解するまで、私が今のところ使用している回避策です。

とにかく回避策: h:selectOneRadio に onclick イベントを追加して、rich:togglePanel の JavaScript API を呼び出します。

onclick="TogglePanelManager.toggleOnClient('TOGGLE_PANEL_ID_HERE',null);"

それでも可能であれば、rich:toggleControl コンポーネントを使用してこれを「適切に」行いたいと思います...

于 2009-08-11T18:34:32.383 に答える