Primefaces p:对话框不断重新打开

时间:2013-04-30 12:36:13

标签: jsf jsf-2 primefaces

我的p:对话框一直打开,我需要它只出现一次。有谁知道怎么做?

    <h:body style="background: url('img/background/teste/brushed_alu.png')!important" onload="dialogAtivacao.show();">
    <script type="text/javascript">
    $(document).ready(function() {
        document.getElementById("j_username").focus();
    });
    </script>

    <p:dialog id="dialogAtivar" header="Ativação de empresa"  showEffect="drop" hideEffect="drop" resizable="false"
              widgetVar="dialogAtivacao" modal="true" closable="true" rendered="#{sessionScope['SPRING_SECURITY_LAST_EXCEPTION'].message == 'ATIVACAO'}">
        <ui:include src="pages/ativacao/AtivacaoEmpresa.xhtml"/>
    </p:dialog>
    ...

按钮:

  <p:panel  styleClass="panelBotaoLogin" >
        <h:commandButton id="saveButton" action="#{login.doLogin()}" value="  Entrar" styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only botaoEntrar"/>
  </p:panel>

LoginBean中的login():

    public String doLogin() throws IOException, ServletException {
           ExternalContext context =  FacesContext.getCurrentInstance().getExternalContext();
           RequestDispatcher dispatcher = ((ServletRequest) context.getRequest()).getRequestDispatcher("/j_spring_security_check?j_username=" + username + "&j_password=" + password);
           dispatcher.forward((ServletRequest) context.getRequest(), (ServletResponse) context.getResponse());
           FacesContext.getCurrentInstance().responseComplete();

           return null;
     }

我有一个customAuthenticationProvider在数据库为空时返回'ATIVACAO',所以我需要打开此对话框来插入数据,但它会一直重新打开(关闭立即重新打开)。

1 个答案:

答案 0 :(得分:3)

  1. <h:body onload="dialogAtivacao.show();"/>在加载HTML的<body>标记时转换为,显示弹出窗口。当整个页面重新加载视图时,将重新加载<body>标记

  2. 每次点击按钮时,
  3. <h:commandButton id="saveButton" action="#{login.doLogin()}" value=" Entrar" styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only botaoEntrar"/>将触发整页刷新。

  4. 每次单击此按钮,一起变为,重新加载整个页面并显示对话框

    改为使用ajax命令组件:

     <p:commandButton id="saveButton" action="#{login.doLogin}" value="  Entrar" styleClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only botaoEntrar"/>
    

    这样,触发了ajax请求,onload只触发一次