2016-09-21 91 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">