2013-04-30 18 views
5

Benim p: iletişim kutusu açılmaya devam ediyor, sadece bir kez görünmesi gerekiyor. Nasıl yapıldığını bilen var mı?Primefaces p: dialog yeniden açılmaya devam ediyor

<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> 
    ... 

düğmesi:

<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> 

login() LoginBean içinde: veritabanı boşken

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; 
    } 

Ben, bu yüzden bu açmak 'ATIVACAO' döndüren bir customAuthenticationProvider ihtiyacım var veri eklemek için diyalog penceresi açılır, ancak tekrar açılmaya devam eder (hemen tekrar açılmasını sağlar).

+0

Burada "açık & kapalı" ne anlama gelir? Diyalog sayfa yüklenir mi? Kapatmayı reddetti mi? Ya da kapatır ve hemen tekrar açar? Diyaloğu normal olarak tetiklemek için ne gerekiyor? – kolossus

+0

Merhaba kolossus, hemen yeniden açılıyor. Teşekkürler. – Kyne

+0

Bağlamın tetikleyici bileşenini bağlam için buraya eklemelisiniz – kolossus

cevap

3
  1. <h:body onload="dialogAtivacao.show();"/> HTML <body> etiketi, yüklenen açılır pencere gösterilecek olduğunda çevirir. Görüş tam sayfa yeniden

  2. <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"/>

    düğmesi tıklandığında tam sayfa yenileme her şey tetiklemek için gidiyor gerçekleşir zaman <body> etiketi tekrar yüklenecektir.

    <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"/> 
    

    Bu: Birlikte

, bu olur, her şey bir sonucu

Kullanım yerine ajax komut bileşeni olarak iletişim, bu düğmeyi tıklayıp tüm sayfayı yeniden ve göstermek şekilde, bir ajax isteği tetiklenir ve onload yalnızca bir kez tetiklenir

+1

Çok teşekkürler. Soru çözüldü! – Kyne

+0

'onLoad' işlevini kullanmak ve ajax geçici çözümünü yapmak yerine, iletişim kutusunun' visible' özniteliği 'rendered' özniteliğiyle aynı ifadeye sahip olmalıdır. Ardından, "veritabanı artık boş değil" diyerek, diyalog penceresinden endişe etmeden tam sayfa yenilemeyi yapabilir. – Manuel

+1

@Manuel, bu da çalışıyor, ancak bir giriş sayfası gibi görünüyor ve OP sayfanın açılması diyaloğunu görüntülemek istediğini varsayalım. 'Visible' attr kullanımı, sayfa yükünün yeni bir istek olup olmadığını kontrol etmek için ekstra bir doğrulama parametresiyle sonuçlanır. Her ikisi de çalışıyor. Bu uygulamanın bir uygulamasını yayınlayabilirsiniz – kolossus