重新渲染panelGroup或区域,具体取决于在selectOneRadio上选择的内容

问题描述

| 基本上是这个问题: JSF 2.0如何在每次从selectOneMenu中选择一个项目时显示不同的h:panelGroup 但是我正在使用selectOneRadio,但我没有答案说可以解决的f:ajax。 我有什么办法可以重新渲染我的panelGroups吗? 我已经尝试了a4j:support,但没有成功。看起来将要重新渲染,但没有任何变化。也许我做错了什么。因此,我将一个onclick = \“ submit()\”放在了selectOneRadio上,它可以工作,但它会再次加载整个页面
<h:selectOneRadio value=\"#{myBean.selectedItem}\" >
 <a4j:support event=\"onclick\" reRender=\"regionSomeItem,regionAnotherItem\" />
 <div class=\"cssClass\">
  <f:selectItem itemValue=\"someItem\" itemLabel=\"Some Item\"/>
 </div>
 <div class=\"cssClass\">
  <f:selectItem itemValue=\"anotherItem\" itemLabel=\"Another Item\"/>
 </div>
 <div class=\"clear\"></div>
</h:selectOneRadio>
<a4j:region id=\"regionSomeItem\" rendered=\"#{condition for some item}\"/>

<a4j:region id=\"regionAnotherItem\" rendered=\"#{condition for another item}\"/>
    

解决方法

        您需要在a4j:region之外建立一个没有标记的组。它似乎与尝试重新渲染它的标签reRender冲突。
<h:selectOneRadio value=\"#{myBean.selectedItem}\" >
 <a4j:support event=\"onclick\" reRender=\"allItemsInOneGroup\" />
</h:selectOneRadio>

<h:panelGroup id=\"allItemsInOneGroup\">

<a4j:region rendered=\"#{condition for some item}\">
</a4j:region>

<a4j:region rendered=\"#{condition for another item}\">
</a4j:region>

</h:panelGroup>