Discussion:
JSF: Probleme mit dem Browser-Back Button
(zu alt für eine Antwort)
Christoph Dahlen
2008-04-23 10:17:27 UTC
Permalink
Hallo,

es existiert offenbar ein grundsätzliches Problem bei JSF (1.1?), daß
die angezeigte URL im Browser nicht wirklich der angezeigten Datei
(JSP/JSF) entspricht.

Dadurch ergibt sich bei Benutzung des Browser-Back Buttons das Problem,
daß nicht die vorhergehende, sondern in der Regel die vorletzte Seite
aufgerufen wird.

Gibt es eine Lösung, um die URL in der Browser-Zeile mit der dem Pfad
der angezeigten Seite in Einklang zu bringen?

Gruß,

Christoph
Christian Helmbold
2008-04-23 12:21:09 UTC
Permalink
Hallo Christoph,

man kann den Browser des Nutzer mit einer expliziten Umleitung
(HTTP-Status-Code 301 oder 302) auffordern, eine neue Seite zu laden.
Aber elegant ist das nicht. Tja, JSF ist halt broken by design.

Gruß
Christian
--
http://www.groovy-forum.de
Das deutsche Forum für Groovy- und Grails-Programmierer.
Christoph Dahlen
2008-04-23 14:03:53 UTC
Permalink
Post by Christian Helmbold
Hallo Christoph,
man kann den Browser des Nutzer mit einer expliziten Umleitung
(HTTP-Status-Code 301 oder 302) auffordern, eine neue Seite zu laden.
Aber elegant ist das nicht. Tja, JSF ist halt broken by design.
Wenn ich das in der faces-config.xml über das <redirect /> Tag mache
(darauf spielst Du vermutlich an), sind aber alle ManagedBeans aus dem
Request Scope flöten.

Gruß,

Christoph
Uwe Seimet
2008-04-23 17:17:19 UTC
Permalink
Post by Christoph Dahlen
es existiert offenbar ein grundsätzliches Problem bei JSF (1.1?), daß
die angezeigte URL im Browser nicht wirklich der angezeigten Datei
(JSP/JSF) entspricht.
Dadurch ergibt sich bei Benutzung des Browser-Back Buttons das Problem,
daß nicht die vorhergehende, sondern in der Regel die vorletzte Seite
aufgerufen wird.
Kannst du das näher beschreiben? Tritt dieser Effekt grundsätzlich auf
oder nur beim Posten eines Formulars? Wird auf der Server-Seite ein
internes Forwarding durchgeführt, das beispielsweise dafür sorgt, dass
das Ergebnis nicht von der JSP gerendert wurde, auf das die ursprünglich
verwendete URL zeigt?
--
-----------------------------------------------------------------------
Dr. Uwe Seimet http://www.linkbylink.net/
Christoph Dahlen
2008-04-23 20:33:56 UTC
Permalink
Post by Uwe Seimet
Post by Christoph Dahlen
es existiert offenbar ein grundsätzliches Problem bei JSF (1.1?), daß
die angezeigte URL im Browser nicht wirklich der angezeigten Datei
(JSP/JSF) entspricht.
Dadurch ergibt sich bei Benutzung des Browser-Back Buttons das
Problem, daß nicht die vorhergehende, sondern in der Regel die
vorletzte Seite aufgerufen wird.
Kannst du das näher beschreiben? Tritt dieser Effekt grundsätzlich auf
oder nur beim Posten eines Formulars?
Kann ich Dir nicht beantworten, es tritt grundsätzlich beim Posten eines
Formulars auf, weil für die Navigation in meiner Applikation
ausschliesslich commandButton und commandLink mit BackingBean Actions
verwendet werden.
Post by Uwe Seimet
Wird auf der Server-Seite ein
internes Forwarding durchgeführt, das beispielsweise dafür sorgt, dass
das Ergebnis nicht von der JSP gerendert wurde, auf das die ursprünglich
verwendete URL zeigt?
Äh .. was? Ich habe Facelets im Einsatz, ist das da nicht immer so?

Gruß,

Christoph
Uwe Seimet
2008-04-24 06:24:05 UTC
Permalink
Post by Christoph Dahlen
Kann ich Dir nicht beantworten, es tritt grundsätzlich beim Posten eines
Formulars auf, weil für die Navigation in meiner Applikation
ausschliesslich commandButton und commandLink mit BackingBean Actions
verwendet werden.
Beim Posten eines Formulars kenne ich lediglich den Effekt, dass
anschließend im Browser die URL angezeigt wird, die in der JSP als
Action-URL für das Formular angegeben war, und die ist u.U. selbst dann,
wenn dasselbe Formular erneut dargestellt wird (beispielsweise weil es
einen Fehler bei der Validierung gab) nicht dieselbe wie die URL, über
die das Formular ursprünglich aufgerufen wurde.
Post by Christoph Dahlen
Wird auf der Server-Seite ein internes Forwarding durchgeführt, das
beispielsweise dafür sorgt, dass das Ergebnis nicht von der JSP
gerendert wurde, auf das die ursprünglich verwendete URL zeigt?
Äh .. was? Ich habe Facelets im Einsatz, ist das da nicht immer so?
Wie sich das bei Facelets verhält weiß ich leider nicht.

Vielleicht kann man dir in der JSF-Mailing-Liste weiterhelfen.
--
-----------------------------------------------------------------------
Dr. Uwe Seimet http://www.linkbylink.net/
Christoph Dahlen
2008-04-24 09:58:13 UTC
Permalink
Post by Uwe Seimet
Post by Christoph Dahlen
Kann ich Dir nicht beantworten, es tritt grundsätzlich beim Posten
eines Formulars auf, weil für die Navigation in meiner Applikation
ausschliesslich commandButton und commandLink mit BackingBean Actions
verwendet werden.
Beim Posten eines Formulars kenne ich lediglich den Effekt, dass
anschließend im Browser die URL angezeigt wird, die in der JSP als
Action-URL für das Formular angegeben war, und die ist u.U. selbst dann,
wenn dasselbe Formular erneut dargestellt wird (beispielsweise weil es
einen Fehler bei der Validierung gab) nicht dieselbe wie die URL, über
die das Formular ursprünglich aufgerufen wurde.
In den Action-Attributen stehen ja keine URLs bei mir, sondern Aktionen
von Beans. Daraus ergibt sich das folgende Problem:

User ruft a.jsf auf, diese URL steht dann auch in der URL.

User führt eine Aktion auf a.jsf auf hinter der eine Action-Methode
eines BackingBean steht. Im Ergebnis wird die Seite b.jsf dargestellt,
in der URL steht aber immer noch a.jsf.

User führt eine Aktion auf b.jsf auf hinter der eine Action-Methode
eines BackingBean steht. Im Ergebnis wird die Seite c.jsf dargestellt,
in der URL steht aber aber nun b.jsf

User klickt Browser-Back und landet auf Seite a.jsf. Er springt also
nicht zur letzten, sondern zur vorletzten Seite.

Gruß,

Christoph
Uwe Seimet
2008-04-24 18:00:44 UTC
Permalink
Post by Christoph Dahlen
In den Action-Attributen stehen ja keine URLs bei mir, sondern Aktionen
Ich bezog mich auf die Action-URL als Attribute des form-Tags.
Post by Christoph Dahlen
User ruft a.jsf auf, diese URL steht dann auch in der URL.
User führt eine Aktion auf a.jsf auf hinter der eine Action-Methode
eines BackingBean steht. Im Ergebnis wird die Seite b.jsf dargestellt,
in der URL steht aber immer noch a.jsf.
User führt eine Aktion auf b.jsf auf hinter der eine Action-Methode
eines BackingBean steht. Im Ergebnis wird die Seite c.jsf dargestellt,
in der URL steht aber aber nun b.jsf
User klickt Browser-Back und landet auf Seite a.jsf. Er springt also
nicht zur letzten, sondern zur vorletzten Seite.
Ja, aber dies ist kein spezieller Effekt bei JSF, sondern tritt immer
dann auf, wenn die Ergebnis-Seite nicht von demselben JSP gerendert
wird, das die vorhergehende Seite dargestellt hat bzw. den Request
zunächst entgegengenommen hat.
Der Browser kann ohne Redirect nicht wissen, dass sich die URL geändert
hat, da er nur das gerenderte Ergebnis übermittelt bekommt, und so
bleibt als Lösung wie bereits vorgeschlagen wohl nur der HTTP-Redirect.

Damit ist aber nicht JSF broken by design, sondern HTTP an sich :).
--
-----------------------------------------------------------------------
Dr. Uwe Seimet http://www.linkbylink.net/
Loading...