是否有任何人成功将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:selectOneRadio
和s:enumItem
s的孩子尝试过切换控件;既不起作用。我也试过在h:selectOneRadio
周围包裹toggleControl,在这种情况下切换控件有效,但是单选按钮没有。
答案 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组件'正确',如果可能的话......