2016-09-21 76 views
0

我试图让啊:panelGrid的有形和无形的通过点击一个按钮,这就是为什么我做了这个代码:绑定在JSF不工作

<p:menu styleClass="ui-menubar" style="width:auto"> 
    <p:menuitem value="khraaaaaaaaa" actionListener="#{accounts.buttonUser()}"></p:menuitem> 
    </p:menu> 

    <h:panelGrid id="naalobouk" binding="#{accounts.pg1}"> 
      <h1>Activer/désactiver un compte étudiant</h1> 
      <hr/> 
      <h:form id="etudiants"> 
       <p:dataTable emptyMessage="Pas d'étudiant!" 
          paginator="true" 
          paginatorPosition="bottom" 
          rows="4" 
          value="#{accounts.etudiants}" 
          var="stu"> 
       <f:facet name="header"> 
        <h:outputText value="Les comptes étudiant" /> 
       </f:facet> 
       <p:column headerText="#"> 
        <h:outputText value="#{stu.id}" /> 
       </p:column> 
       <p:column headerText="nom"> 
        <h:outputText value="#{stu.nom}" /> 
       </p:column> 
       <p:column headerText="prenom"> 
        <h:outputText value="#{stu.prenom}" /> 
       </p:column> 
       <p:column headerText="email"> 
        <h:outputText value="#{stu.email}" /> 
       </p:column> 
       <p:column headerText="password"> 
        <h:outputText value="#{stu.password}" /> 
       </p:column> 
       <p:column headerText="action"> 
        <p:commandButton rendered="#{accounts.butshow}" value="#{stu.actif?'desactiver':'activer'}" action="#{accounts.doToggleStudentState(stu)}" update=":etudiants"/> 
       </p:column> 
       </p:dataTable> 
      </h:form> 
      </h:panelGrid> 

,这里是我的豆代码

private HtmlPanelGrid pg1 = new HtmlPanelGrid();//getter and setter 

    public void buttonUser(){ 

     if(pg1.isRendered()==true){ 
      pg1.setRendered(false);; 
     } 
     if(pg1.isRendered()==false){ 
      pg1.setRendered(true); 
     } 
     } 

当我点击按钮没有任何反应。这里有什么问题?

+0

你能告诉你的全豆代码 –

+0

表示不会从XHTML调用的方法,和PG2不XHTML存在,所以至少对我来说这是令人困惑的 –

+0

buttonaddUser函数将某些内容设置为“false”,然后立即将其设置为“true”。 –

回答

0

我假设你想要的方法否定呈现的属性。正如评论中提到的那样,这种方法是有缺陷的。最简单的代码将是

public void buttonUser() { 
    pg1.setRendered(!pg1.isRendered()); 
} 

的主要问题是,电话号码:菜单项默认使用AJAX技术,在默认情况下一点儿也不在页面上更新任何东西。所以要么更新一些东西,要么不使用ajax;

<p:menuitem value="khraaaaaaaaa" actionListener="#{accounts.buttonUser()}" ajax="false"> 

使用Ajax你需要用的panelGrid中的,将永远被渲染的成分,因为你不能更新也没有在第一时间被渲染的成分。包裹panelGrid中在panelGroup中:

<h:panelGroup id="container"> 

和更新:

<p:menuitem value="khraaaaaaaaa" actionListener="#{accounts.buttonUser()}" update=":container">