Primefaces Dialog

freez

Top Contributor
Hallo,

ich möchte mit einem Button einen Dialog öffnen. Da vorher validiert werden soll, nutze ich ein boolean im Bean um zu prüfen, ob der Dialog angezeigt werden soll. Komischerweise funktioniert das Ganze genau ein mal und dann nicht mehr. Erst wenn ich die Seite neu lade, dann funktioniert es wieder einmal.

Ich habe mal das Ganze zusammengeschrumpft:
[XML]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>


<h:form id="d">
<p:commandButton icon="ui-icon-plusthick" update="@form"
actionListener="#{test.showDialog}" value="Dialog ON"></p:commandButton>

<p:dialog id="dlg" appendToBody="true" width="400" header="Test"
resizable="false" modal="true" visible="#{test.dlgOn}">


<p:ajax event="close" listener="#{test.closeDialog}" />
<h:eek:utputText value="TEST"></h:eek:utputText>


</p:dialog>
</h:form>

</h:body>
</h:html>[/XML]

Java:
import java.io.Serializable;

import javax.faces.event.ActionEvent;

import org.apache.log4j.Logger;
import org.primefaces.event.CloseEvent;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component("test")
@Scope(value = "session")
public class BNTest implements Serializable {

	private static final long serialVersionUID = 2864938496912061302L;

	private static Logger log = Logger.getLogger(BNTest.class);
	private boolean dlgOn = false;

	public void showDialog(ActionEvent ae) {
		dlgOn = true;
		log.debug("showDialog: " + dlgOn);
	}

	public void closeDialog(CloseEvent ae) {
		dlgOn = false;
		log.debug("showDialog: " + dlgOn);
	}

	public boolean isDlgOn() {
		return dlgOn;
	}

	public void setDlgOn(boolean dlgOn) {
		this.dlgOn = dlgOn;
	}
}

Die ActionListener werden beide richtig ausgeführt. Nur beim 2. mal wird der Dialog nicht angezeigt. Was mache ich verkehrt?

Meine Umgebung:
  • Tomcat 7
  • Primefaces 3.4.2
  • Spring 3
  • JSF 2
 

freez

Top Contributor
Also, ich habe es jetzt einschränken können. Es liegt scheinbar am CloseListener. Leider benötige ich den um den Status wieder zurückzustellen, da sonst der Dialog beim neu Laden der Seite automatisch aufploppt.

Hat jemand ne Idee, wie ich das anders lösen kann?
 

Nogothrim

Aktives Mitglied
[XML]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<h:html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>

<h:form id="d">
<p:commandButton action="#{test.showDialog}" icon="ui-icon-plusthick" value="Dialog ON" onclick="dialog.show();" />

<p:dialog id="dlg" appendToBody="true" width="400" header="Test" resizable="false" modal="true" widgetVar="dialog">

<p:ajax event="close" listener="#{test.closeDialog}" />
<h:eek:utputText value="TEST"></h:eek:utputText>

</p:dialog>
</h:form>

</h:body>
</h:html>
[/XML]

Das mit dem visible Attribut kannte ich so gar nicht, mit dem javascript show() geht es so bei mir jedenfalls und der close listener wird auch aufgerufen.
 

freez

Top Contributor
Das mit dem visible Attribut kannte ich so gar nicht, mit dem javascript show() geht es so bei mir jedenfalls und der close listener wird auch aufgerufen.


Danke erstmal für deinen Test.

Ich habe leider keine wirklich funktionierende Lösung mit JS [c]dialog.show();[/c] gefunden. Es ist richtig, dass show() und close() immer funktionieren, aber alle Varianten, die ich im Netz gefunden haben die Funktion nicht aufzurufen, wenn die Validierung fehl schlägt haben kein befriedigendes Ergebnis geliefert. Nehme ich den Close Listener raus geht es ja auch hervorragend, mit dem kleinen Nachteil, dass das Flag im Bean auf TRUE bleibt. Ich muss also sicherstellen, dass bei erneuten Aufruf der Seite das Flag unbedingt wieder auf FALSE gesetzt wird. Sonst wird der Dialog gleich wieder angezeigt.
 

JimPanse

Bekanntes Mitglied
[XML]
<!DOCTYPE html>
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<meta http-equiv="Content-Script-Type" content="text/javascript"></meta>
<meta http-equiv="Content-Style-Type" content="text/css"></meta>
</h:head>
<h:body>

<h:form prependId="false" id="btnFm">
<p:commandButton actionListener="#{test.showDialog}" icon="ui-icon-plusthick"
value="Dialog ON" process="@this" update=":dlgFm:dlg"
oncomplete="dialog.show();" />
</h:form>

<h:form prependId="false" id="dlgFm">
<p:dialog id="dlg" appendToBody="true" width="400" header="Test"
resizable="false" modal="true" widgetVar="dialog"
visible="#{test.dlgOn}">

<p:ajax event="close" listener="#{test.closeDialog}" />
<h:eek:utputText value="TEST"></h:eek:utputText>

</p:dialog>
</h:form>

</h:body>
</f:view>
</h:html>
[/XML]
 

JimPanse

Bekanntes Mitglied
. Ich muss also sicherstellen, dass bei erneuten Aufruf der Seite das Flag unbedingt wieder auf FALSE gesetzt wird. Sonst wird der Dialog gleich wieder angezeigt.

hatte ich überlesen, dann trotz SessionScope neu zu initialisieren:

[XML]
<!DOCTYPE html>
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<meta http-equiv="Content-Script-Type" content="text/javascript"></meta>
<meta http-equiv="Content-Style-Type" content="text/css"></meta>
</h:head>
<h:body>
<f:event listener="#{test.preRenderBodyEvent}"
type="javax.faces.event.PreRenderComponentEvent"></f:event>

....
</h:body>
</f:view>
</h:html>
[/XML]

Java:
	public void preRenderBodyEvent(ComponentSystemEvent event) {
boolean dlgOn = false;
}
 

freez

Top Contributor
@JimPanse: Danke ... dein Tipp funktioniert

Ich habe es im Endeffekt aber ganz anders gemacht. Neben den Bestätigen Button habe ich ein Abbrechen Button und den Dialog auf closeable="false". Ist für den User bei Formularen eh ein bekanntes Bild.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
FINF_AW_Alex JSF PrimeFaces Dialog verlinken Web Tier 3
S Primefaces commandButton in einem Dialog/Form/PanelGrid führt actionListener nicht aus Web Tier 4
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
A JSF Suche Beispiel für Primefaces Tree als Navigation Web Tier 3
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
M JSP PrimeFaces LayoutUnits <- breite lässt sich nicht erzwingen wenn 'center' Web Tier 0
T JSF Primefaces: selectedvalue von "selectmanyCheckbox" geht verloren Web Tier 0
W JSF Primefaces Selection Mode Web Tier 2
W JSF einfache DataTable PrimeFaces Web Tier 1
W JSF Primefaces Web Tier 5
F JSF Problem mit Primefaces Web Tier 7
F JSF Problem mit Primefaces Web Tier 4
S JQuery und Primefaces (Immer wieder Ärger damit) Web Tier 0
K JSON in Primefaces Table Web Tier 3
C JSF Zusammenarbeit Primefaces und Tomahawk. Web Tier 2
J JSF Grad der Barrierefreiheit von PrimeFaces, ICEFaces, RichFaces und OpenFaces Web Tier 2
P JSF Primefaces Picklist-Ersatz mit vielen Daten Web Tier 4
S primefaces picklist untereinander anordnen Web Tier 6
M onNodeExpand listener in PrimeFaces Web Tier 4
T JSF Primefaces: DataTable Ajax Update - Weiterleitung von anderer Seite Web Tier 11
F Primefaces Datatable => Inplaces Web Tier 3
F Primefaces Datatable Web Tier 6
F JSF Primefaces 3.3 treetable Web Tier 9
F PrimeFaces - selectOneMenu Web Tier 2
F PrimeFaces commandButton und actionListener Web Tier 6
F PrimeFaces p:selectOneMenu funktioniert nicht Web Tier 12
M JSF Dynamische Größe bei Primefaces Komponenten Web Tier 2
P PrimeFaces DataGrid Click "simulieren" Web Tier 5
J JSF2+primefaces? Web Tier 20
H JSF JSF 2.0 (Primefaces) commandLinks mit action="mypage.xhtml" ohne die URL im Browser zu ändern Web Tier 8
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
F Primefaces Einstieg Web Tier 1
R Primefaces: No Library Found For This Namespace Web Tier 4
M Primefaces COmmandBUtton Web Tier 8
D JSF Ajax mit Facelets (PrimeFaces) Web Tier 4
Z Primefaces sieht grausam aus Web Tier 1
A [PrimeFaces] dataTable mit paginator Probleme Web Tier 2
Z PrimeFaces (/ JSF) Konfigurationsproblem Web Tier 8
C selectOneMenu mit valueChangeListener im <p:dialog Web Tier 2
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
M JSF Dialog nur nach erfolgreicher Action schließen Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben