2016-09-21 5 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()); 
} 

Основная проблема заключается в том, что р: MENUITEM по умолчанию использует AJAX, который по умолчанию does'nt обновления ничего на этой странице. Так что либо обновите что-нибудь, либо не используйте 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"> 
Смежные вопросы