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:selectOneRadio. 我已经尝试将切换控件作为h:selectOneRadioands:enumItem的子控件;两者都不起作用。我也尝试将 toggleControl 包裹在 周围h:selectOneRadio,在这种情况下,切换控件有效,但单选按钮无效。

4

2 回答 2

2

只需将您的 rich:togglePanel 绑定到支持 bean 上的相同值,然后使用 a4j 支持标签来更新该值并重新呈现面板。

要记住的一件事是,rich:togglePanel #value 属性必须解析为字符串,因此您可能需要绑定到 #{backingValue.name()} (不要使用 toString(),因为 somone 可能会覆盖以后在你身上...)

像这样的东西应该工作:

<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”事件可能有点参差不齐。我已经使用 Strings 完成了此操作,其中支持 bean 中的操作通过设置值来更改切换面板状态 - 但它也应该与 enum 一起使用。

于 2009-08-11T23:08:46.027 回答
0

这并不是对我上述问题的严格回答,但这是我目前正在使用的一种解决方法,直到我弄清楚如何在上面“更好”地做到这一点。

无论如何解决方法:将 onclick 事件添加到调用 rich:togglePanel 的 javascript API 的 h:selectOneRadio:

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

如果可能的话,我仍然想使用 rich:toggleControl 组件“正确地”执行此操作...

于 2009-08-11T18:34:32.383 回答