将rich:toggleControl附加到单选按钮或选择项目

时间:2009-08-11 18:29:58

标签: jsf richfaces seam

是否有任何人成功将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:enumItem,以便我可以切换到特定状态。但是在这一点上,如果切换控件可以附加到h:selectOneRadio,我会很高兴。我作为h:selectOneRadios:enumItem s的孩子尝试过切换控件;既不起作用。我也试过在h:selectOneRadio周围包裹toggleControl,在这种情况下切换控件有效,但是单选按钮没有。

2 个答案:

答案 0 :(得分:1)

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

要记住的一件事是:rich:togglePanel #value属性必须解析为String,因此您可能需要绑定到#{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中的一个动作通过设置值来改变切换面板状态 - 但它应该也可以使用枚举。

答案 1 :(得分:0)

这不是我上面问题的严格答案,但这是我现在正在使用的一项工作,直到我弄清楚如何更好地完成它。

无论如何解决方法:向h:selectOneRadio添加一个onclick事件,调用rich:togglePanel的javascript API:

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

仍然我想使用rich:toggleControl组件'正确',如果可能的话......