ActionListener startet bereits beim Laden der Seite

cuchulainn

Mitglied
Hallo alle zusammen,

ist es normal, dass bei JSF ein ActionListener bereits beim Laden bzw. Aktualisieren der Seite gestartet wird? Das ist überhaupt nicht in meinem Sinn, da der Listener zu einer Anlegen-Schaltfläche gehört, um einen neuen Datensatz in einer Datenbank anzulegen. Und das soll natürlich nicht bei jedem Aktualisieren oder Laden der Seite geschehen, sondern wirklich nur, wenn die Schaltfläche auch betätigt wird.

Das ist der Listener auf meiner JSF-Seite:

Code:
				<h:panelGrid columns="2">
				    <h:outputLabel for="txtName">
				    	<h:outputText value="Name:" />
				    </h:outputLabel>				    
				    <h:inputText id="txtName"
				                 value="#{sightView.sight.sightName}" />
				  
				  	<h:outputLabel for="txtPrice">
				    	<h:outputText value="Eintrittspreis:" />
				    </h:outputLabel>				    
				    <h:inputText id="txtPrice"
				                 value="#{sightView.sight.admissionPrice}" />
				    <f:facet name="footer">             
				    	<h:commandButton value="Neu anlegen" actionListener="#{sightView.newSight}" />
				    </f:facet>
			</h:panelGrid>

Und hier der dazugehörige Java-Code:

Code:
	public void newSight(ActionEvent event) {
		sightControl.saveSight(sight);
	}

Vielen Dank,

Christopher
 
hey, hast du ein <h:form></h:form> um dein konstrukt, wenn nicht probiers mal mit. In deinem Post sieht man ja nicht deine komplette jsf-seite, deswegen frage ich.

Ich selber habs noch nicht ActionListener mit jsf probiert, habs bisher so gemacht, dass ich mit action="#{....}" direkt die gewünschte Methode aufgerufen habe anstatt über einen ActionListener, probiersmal mit action ob das was ändert.
 
Also soweit wie ich JSP/JSF verstehe ist das mit einem ActionListener so nicht möglich da dieser ja auf ein ActionEvent wartet , du aber über HTTP nunmal so was nicht senden kannst *zumindest nicht ohne RMI*. Von daher wirst du wohl mit einem "normalen" Forumlar arbeiten und die eingaben auswerten müssen.
 
Hallo,

seltsam, ich kann da spontan jetzt keinen Fehler entdecken. Falls der Button nicht durch eine Form eingeschlossen sein sollte, sollte es überhaupt nicht möglich sein, dass er einen Event absetzt aber da die eventmethode automatisch ausgelöst wird, gehe ich davon aus, dass die methode durch einen anderen Event aufgerufen wird.Einfach mal STRG-F in der xhtml nach "sightView.newSight" suchen oder in der Java-Klasse rechtsklick auf die methode => open call hierachy.
Ansonsten tausche mal das Attribut actionListener durch eine einfache Action aus:

Code:
<h:form>
    	<h:commandButton action="#{sightView.newSight}" value="test" />
      </h:form>

Java:
public void newSight() {
        //...
    }

action = für Business-Logik / Navigationhandling
actionListener = Interface-Logik


Ansonsten, hast du den richtigen ActionEvent aus javax.faces.event.* importiert? Das hat mich nämlich mal einen halben Tag gekostet.

Hier nochmal ein StepByStep-Beispiel:

http://johnderinger.wordpress.com/2007/10/10/action-handlers-and-event-listeners/

http://books.google.de/books?id=VA7...&resnum=6&ved=0CEkQ6AEwBQ#v=onepage&q&f=false
http://books.google.de/books?id=x8Y...&resnum=3&ved=0CDgQ6AEwAg#v=onepage&q&f=false

*EDIT* füg mal bitte in der Event-Methode ein getSource bzw ein getComponent hinzu, dann sehen wir genau wo der Event herkommt.

Gruß

Sebastian
 
Zuletzt bearbeitet:
Ahh ... danke für die Info. Ich kenne mich auf dem Gebiet EE , JSP / JSF halt nicht so aus ... und mit Beans habe ich noch nie zu tun gehabt.
 
Kein Problem, hast mir ja auch schon ein paar mal ein paar nette Tipps gegeben :) Nichtsdestotrotz ist JSF ein sehr interessante Technik, bei der es sich auf jeden Fall mal lohnt reinzuschauen - außerdem ist die Lernkurve recht steil :)

Gruß Sebastian
 
Zurück