JSF Primefaces和ajax监听器,渲染时未显示按钮

时间:2014-11-10 16:32:52

标签: ajax jsf button primefaces listener

我正在使用JSF和Primefaces来开发JavaEE应用程序。每次按下按钮(Authenticate),都必须显示BUTTON(按钮)和消息(Message)。 问题是显示的是消息,而不是按钮。我该怎么做才能显示按钮?

这是我的代码:

ManagedBean IdCertificateManagedBean.java

String  m_strRoute;
String  m_strMessageRegister;
boolean m_bRegistrationCorrect;


//Getters and Setters 

//Constructor
public IdCertificateManagedBean()
{
        m_strMessageRegister = "";
        m_strRoute = "";
        m_bRegistrationCorrect = false;
}


 public void authenticateUser()
 {      
     try
    {
       int a=5;

        if (a ==5)
        {   

                m_strMessageRegister = "hello";
                m_bRegistrationCorrect = true; 
                m_strRoute = "/admin/menuadmin"; 
         }    
          else 
          { 
                m_strMessageRegister = "ERROR";
          } 
     }  
     catch ( Exception e)
    {
            m_strMessageRegister = "Error";
    }

  }

}

的facelet

<p:commandButton value="Authenticate">
    <p:ajax listener="#{IdCertificateManagedBean.authenticateUser()}" update="Message, Button" />
</p:commandButton>

<h:outputText id="Message" value="#{IdCertificateManagedBean.MessageRegister}" />                   
<p:commandButton id="Button" value="Go" action="#{IdCertificateManagedBean.route}" rendered=" {IdCertificateManagedBean.registrationCorrect}" />

1 个答案:

答案 0 :(得分:1)

您必须将<h:commandButton />包装在容器内<h:panelGroup />,然后刷新容器。 问题是,在第一页加载时,您的按钮不会呈现,因此它不会插入页面的DOM中。在页面刷新时,您尝试刷新它,但由于该按钮不在页面上,您无法执行此操作。 解决方案可能是这个

<h:panelGroup layout="block" id="buttonDiv">
    <h:commandButton ... />
</h:panelGroup>

然后在你的ajax中你必须刷新buttonDiv