# Body onUnload Java Methode aufrufen



## Markus138 (31. Mrz 2010)

Hallo,

Ich würde gern beim schließen eines Fenster (mit x) eine Java Methode aufrufen. Das schaffe ich mittels dem Body Tag onunload. Problem dabei ist, dass diese Methode auch aufgerufen wird, wenn ich in dem Formular irgendeinen Button drücke. Gibt es hier eine andere Möglichkeit dies zu realisieren, sodass wirklich nur beim schließen des Fensters mit X diese Methode aufgerufen wird?


----------



## Noctarius (31. Mrz 2010)

Bist du sicher, dass du nicht eine JavaScript Funktion aufrufen willst?

PS: Mit wäre keine Möglichkeit dazu bekannt eine Unterscheidung einzuführen.


----------



## Markus138 (31. Mrz 2010)

ja ich rufe eine JavaScript Methode auf, die mir dann eine Java Methode aufruft


----------



## Noctarius (31. Mrz 2010)

Also innerhalb eines Applets?


----------



## Markus138 (31. Mrz 2010)

Ich mache das momentan so:

JavaScript Funktion:


```
function loadValues() {
	document.getElementById('editForm:loadValues').click();
}
```


JSP Code Abschnitt:



```
<body onUnload="loadValues();">
...

<h:commandButton id="loadValues" styleClass="hidden" tabindex="-1"
	action="#{userBean.loadValues}" image="/img/invisible.png" />
```

so wird mir beim schließen des Fensters (und leider auch beim drücken eines anderen Buttons) die Methode loadValues in der Bean "userBean" aufgerufen


----------



## Noctarius (31. Mrz 2010)

Irgendwie versteh ich den Sinn grad noch nicht Oo


----------



## Markus138 (31. Mrz 2010)

ich will beim Schließen des Fensters eine Methode aufrufen. Und zwar nur dort und nicht beim Klicken eines Buttons


----------



## Noctarius (31. Mrz 2010)

Also irgendwie ist mir dein Code nicht klar, vermutlich liegt es daran dass ich keinen Sinn darin finde beim Schließen eines Fensters Daten zu laden aber ok.

Wie wäre es das Target des Event-Objektes zu überprüfen? Vielleicht kannst du dann Buttons einfach herausfiltern? (Gibt es bei onUnload ein Event-Objekt? Ka)


----------



## Markus138 (31. Mrz 2010)

nachdem das anscheinend, warum auch immer, nicht funktioniert habe ich mein Problem jetzt anders gelöst.


----------



## JanHH (1. Apr 2010)

Also erstmal ist das ja ein grandioses Beispiel für eine absolut diffus gestellte Frage. Offenbar handelt es sich um ein JSF-Problem, davon ist in der Frage gar keine Rede.

Ansonsten kommts mir ziemlich unsauber vor, auf diese Art per javascript-Event eine java-Funktion aufzurufen, die eigentlich die action-Methode eines CommandButton ist.

Ich vermute, es geht darum, sicherzustellen, dass wenn ein User die Anwendung nicht ordnungsgemäß beendet, sondern einfach das Browserfenster schliesst, irgendwelche Daten wieder zu resetten. In diesem Fall würde ich aber eher versuchen, das Timeout der HTTP-Session (und damit das Ende des Lebenszyklus von Session Scope-Beans) abzufangen, und die Daten da dann wieder zu resetten.


----------



## Noctarius (1. Apr 2010)

Wenn es das ist dann würde ich einfach beu onUnload einen HttpXmlRequest abschicken mit dem Befehl reset oder so. Anhand der SessionId kann dann die Session aufgeräumt werden und zwanghaft beenden. Sollte das nicht funktionieren (weil laut Specification Browser nicht gezwungen sind an diesem Punkt noch Daten zu senden) kann man, wie du sagst bei Sessionablauf noch aufräumen.


----------



## Markus138 (1. Apr 2010)

keine Ahnung was an meinem ursprünglichen Posting nicht verständlich war. Ich wollte lediglich ein paar Aufräumarbeiten nach dem schließen des Fensters durchführen. Dies habe ich jetzt aber schon auf andere Art und Weise lösen können.

Zum Thema wie ich die Java Methode starte: nunja, wenn ihr Vorschläge habt wie ich das eleganter lösen kann - nur her damit, mir war keine andere Möglichkeit bekannt.


----------



## Noctarius (1. Apr 2010)

Steht doch direkt im Post darüber und darüber. Und was daran nicht verständlich war? So ziemlich alles, mir war bis vorhin immer noch nicht genau klar was du damit eigentlich erreichen wolltest.


----------



## JanHH (2. Apr 2010)

Nuja, Du schreibst "schliessen des Fensters". Kein Wort, welches Fenster. Fenster einer Anwendung, Browserfenster?

Weiterlesen, offenbar hats was mit HTML zu tun. Es geht also wohl ums Browserfenster. Hoppla, da dann eine "Java-Funktion" aufrufen? Hat er was falsch verstanden? Meint er Javascript?

Formular... Button.. offenbar gehts um HTML-Formulare, er meint wohl wirklich Javascript, nicht java.

Vier Antworten später: OH! Es handelt sich um eine JSF-Anwendung! Davon war bisher nicht die Rede. Und ja, er will wirklich eine java-Funktion aufrufen.

Ist immer noch unklar, was an Deinem ersten Posting unklar ist?


----------

