# PrimeFaces commandButton und actionListener



## fsicher (28. Sep 2012)

Hallo allerseits

Ich arbeite gerade mit PrimeFaces 3.4 und habe Probleme mit action / actionListener bei einem CommandButton. Manchmal funktioniert es, manchmal nicht. Wenn es funktioniert und ich ändere etwas, was dazu führt, dass der Code kompiliert und neue deployed wird (Tomcat 7.x), funktioniert es plätzlich nicht. Ab und zu hilft es, wenn ich die App im Tomcat-webapps lösche und neu deploye oder ein paar mal Cache im Browser lösche (Firefox / Chrom), aber das ist sehr mühsam. Denn, manchmal hilft nichts und ich stehe da ratlos ...

Hat jemand ähnliche Erfahrungen gemacht? Wenn ich Debugging starte, geht das manchmal aber manchmal auch nicht. Wenn ich auf die Schaltfläche klicke, wird die Methode offenbar gar nicht aufgerufen. 


```
<p:commandButton value="#{msg_vertrag.btn_save}"
						action="#{vertragMenuBean.showContent('vertrag_kodrev')}"
						update=":content" process="@this" />

// Die methode des 'vertragMenuBean'
public void showContent(String pageId) {
		
		if (pageId.equals("vertrag_kodrev")) {
			pageToInclude = "/WEB-INF/controls/vertrag/kodrev/add_kodrev.xhtml";
		} else if (pageId.equals("vertrag_index")) {
			pageToInclude = "/WEB-INF/controls/vertrag/summary.xhtml";
			try {
				String r = FacesContext.getCurrentInstance()
						.getExternalContext().getRequestContextPath();
				FacesContext.getCurrentInstance().getExternalContext()
						.redirect(r + "/index.xhtml");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
```

Aus irgendeinem Grund wird der Code ab und zu nicht ausgeführt. Liegt es am Tomcat oder PrimeFaces?

Danke für jeden Tipp.


----------



## fsicher (1. Okt 2012)

Kämpfe mit meinem Problem leider immer noch ... 

Ich habe das Gefühl, dass es mit Tomcat bzw. Umgebung zusammenhängt. Arbeite mit eclipse jee (indigo und juno). Leider stelle ich fest, dass das Verhalten nicht veraussagbar ist: manchmal funktioniert es, manchmal nicht. Wenn ich den Server (Tomcat) in Debug-Modus starte und mit Break-Points in der Methode 'showContent' arbeite, ist die Chance grösser, dass es "funktioniert". 

In der Console finde ich keine Meldungen, die mir evtl. weiter helfen könnten. Das Gleiche in Log-Dateien (CATALINA_HOME/logs). Weiss jeman, wo man evtl. mehr über Abläufe im Hintergrund erfahren könnte? Oder, kann man evtl. Tomcat anders konfigurieren, um etwas mehr über Ablauf zu erfahren?

Danke.


----------



## JimPanse (1. Okt 2012)

fsicher hat gesagt.:


> Leider stelle ich fest, dass das Verhalten nicht veraussagbar ist: manchmal funktioniert es, manchmal nicht.



Firefox + Firebug installieren und schauen ob der ajax-request überhaupt ausgeführt wird bzw. analysiere den Reponse. Eventuell ist in dem Formular ein input field mit required =  true das nicht ausgefüllt wird -> dann wird die Aktion nicht ausgeführt -> im Reponse müßte dann sowas wie validationFailed=true stehen.

Ansonsten poste doch einfach ein wenig mehr code.

Gruß


----------



## freez (1. Okt 2012)

Sobald im View Server (Eclipse) beim Tomcat Restart steht, sollte man meiner Erfahrung nach neu starten. Und das geschieht sehr oft dann, wenn man am Code der Beans / Servlets / xml Files selbst was ändert. An den Views kann man in der Regel Änderungen vor nehmen, ohne Neustart. Es kann zwar sein, dass die Änderungen in Tomcat richtig ankommen, aber wenn du sicher gehen willst, dann mach nen Restart ... ich weiß ... nervt ziemlich ... ich würde mir auch wünschen, dass Tomcat von allein die Anwendung neu lädt. Jedenfalls kann ich so recht stabil die Anwendung testen.

Ich weiß jetzt nicht, ob es ein Tomcat Problem ist und ob es bei anderen Servern besser ist. Evtl. gibt es hier auch einen Einstellung, die ich bisher nicht gesehen hatte.


----------



## fsicher (2. Okt 2012)

Vielen Dank für Tipps.


----------



## Nogothrim (4. Okt 2012)

Zu den Dingen, die 100%ig einen Server Restart erforden zählen z.B.:


Klasse hinzufügen / umbenennen
Methode hinzufügen / umbenennen
Methodensignatur ändern
Attribut hinzufügen / umbenennen
Annotationen (geht manchmal, meist aber nicht)

Was auf jeden Fall geht, ist innerhalb von Methoden Code zu ändern, auch neue lokale Variablen einführen etc. Änderungen an xhtml Seiten sollten auch immer möglich sein.


----------



## transdenzentral (20. Nov 2012)

@TE Hast Du inzwischen eine funktionierende Lösung?

Ich stehe hier vor dem gleichen Problem. Manchmal zündet der ActionListener, manchmal nicht. Manchmal braucht man zwei Klicks, manchmal nur einen... - alles ein wenig Voodoo.

Ich verwende auch einen Tomcat 7.x und PF in Version 4.1 

Viele Grüße
transdenzentral


----------

