2010-12-24 17 views
13

Ich bin nicht sicher, ob dieses Verhalten normal ist oder nicht.
Ich hoffe, dass meine panel nur nach dem Klicken auf eine Schaltfläche gerendert wird, die eine ajax Anfrage auslöst.JSF 2/primefaces: p: Panel nicht mit Ajax gerendert?

nicht mit Ajax funktioniert:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="false" action="#{myBean.setFlagToTrue}"
  3. bevor die Schaltfläche klicken, wird der MyPanel nicht angezeigt (flag = false)
  4. auf die Schaltfläche klicken, wird das Flag auf true gesetzt wird, und myPanel ist in Ordnung

Verwenden von Ajax fehlschlägt:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="true" action="#{myBean.setFlagToTrue}" update="myPanel"
  3. bevor die Schaltfläche klicken, wird der MyPanel nicht angezeigt (flag = false)
  4. auf die Schaltfläche klicken, wird das Flag auf true gesetzt (wie durch meine Protokolldatei angezeigt) und MyPanel nicht gemacht

ich habe versucht, das gerenderte Attribut weggelassen, und in der Tat die ajax-Arbeit ist in Ordnung.
Ich kann das erkennen, indem ich auf die Änderungen innerhalb des Panels schaue.

Antwort

30

setzen Sie Ihr Panel mit bedingten Rendering in einem anderen und aktualisieren Sie es. Gefällt mir:

<p:outputPanel id="toUpdate"> 
    <p:panel id="myPanel" rendered="#{myBean.flag}"> 
    </p:panel> 
<p:outputPanel> 

<p:commandButton update="toUpdate"/> 

Dies ist ein bekanntes Problem. Das Element kann nicht aktualisiert werden, wenn es nicht in DOM existiert.

+0

Sehr schön. Funktioniert wie Magie. Vielen Dank. – bertie

+1

Warum müssen wir das tun? – Makky

+0

es funktioniert, das ist super !! danke – Spartan

Verwandte Themen