当我使用selectOneRadio和我的面板的渲染器时,我遇到了问题。
我的cession.xhtml包含此
<p:selectOneRadio id="options" value="#{editionBean.radioProprietaire}">
<f:selectItem itemLabel="Particulier" itemValue="particulier" />
<f:selectItem itemLabel="Societe" itemValue="societe" />
<f:ajax listener="#{editionBean.listener}"/>
</p:selectOneRadio>
<h:panelGroup rendered="#{editionBean.renderSoc}">...</h:panelGroup>
<h:panelGroup rendered="#{editionBean.renderPart}">...</h:panelGroup>
My EditionBean.class
private boolean renderSoc;
private boolean renderPart;
private String radioProprietaire;
public void listener(AjaxBehaviorEvent event) {
if(null != radioProprietaire && radioProprietaire.equals("particulier")){
renderPart = true;
renderSoc = false;
}
else if(null != radioProprietaire && radioProprietaire.equals("societe")){
renderPart = false;
renderSoc = true;
}
}
我知道方法监听器是调用,但如果有人可以帮助我,那么面板是不可见的?
答案 0 :(得分:3)
有两个问题。
您在PrimeFaces组件中需要<p:ajax>
而不是<f:ajax>
。
您需要在ajax更新中显式指定JSF组件,以便重新呈现它。使用当前的方法,您基本上不会更新任何内容。使用<f:ajax>
时,应在render
属性中指定要更新的组件,并在<p:ajax>
属性中指定update
。
此外,还有一些低效率。您根本不需要侦听器方法和许多布尔属性。您可以直接在rendered
属性中检查单选按钮值。
所以,总而言之,这应该做到:
<p:selectOneRadio id="options" value="#{editionBean.radioProprietaire}">
<f:selectItem itemLabel="Particulier" itemValue="particulier" />
<f:selectItem itemLabel="Societe" itemValue="societe" />
<p:ajax update="groups" />
</p:selectOneRadio>
<h:panelGroup id="groups">
<h:panelGroup rendered="#{editionBean.radioProprietaire == 'societe'}">
...
</h:panelGroup>
<h:panelGroup rendered="#{editionBean.radioProprietaire == 'particulier'}">
...
</h:panelGroup>
</h:panelGroup>
答案 1 :(得分:1)
正如this answer中所述,您应该将<h:panelGroup>
组件包装在UIContainer
内并渲染更大的容器,以使面板变得可见 :
<p:selectOneRadio id="options" value="#{editionBean.radioProprietaire}">
<f:selectItem itemLabel="Particulier" itemValue="particulier" />
<f:selectItem itemLabel="Societe" itemValue="societe" />
<p:ajax listener="#{editionBean.listener}" render="pnlSoc pnlPart" />
</p:selectOneRadio>
<h:panelGrid id="pnlSoc">
<h:panelGroup rendered="#{editionBean.renderSoc}">...</h:panelGroup>
</h:panelGrid>
<h:panelGrid id="pnlPart">
<h:panelGroup rendered="#{editionBean.renderPart}">...</h:panelGroup>
</h:panelGrid>