1

我在使用 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>

我的 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;
      }
  }

我知道调用了方法侦听器,但是如果有人可以帮助我,这些面板不可见?

4

2 回答 2

4

有2个问题。

  1. 您需要<p:ajax>而不是<f:ajax>PrimeFaces 组件。

  2. 您需要在 ajax 更新中明确指定一个 JSF 组件,以便重新渲染它。使用当前的方法,您基本上不会更新任何内容。With <f:ajax>,需要更新的组件应该在attributerender和within属性中指定。<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>

也可以看看:

于 2013-01-19T14:40:52.100 回答
1

正如这个答案<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>
于 2013-01-19T13:58:41.860 回答