[JavaScript] Weiterleitung inklusive URL-Parameter

Irgendwie steh ich mit JavaScript auf Kriegsfuß.

Ich habe eine JSF-Anwendung, wenn sich dort jemand ausloggt wird er auf eine logout-Seite weitergeleitet nach dem die Session invalidiert wurde. Diese Logout-Seite leitet wiederum weiter zur welcomePage, falls sich der Nutzer neu einloggen möchte.

Der Aufruf der Logout-Seite enthält URL-Parameter die er mit an die welcomePage reichen soll. Problem ist aber, wenn man nach dem Logout auf der welcomePage angekommen ist, wurden die URL-Parameter nicht übergeben.

Der aufruf der logout.xhtml erfolgt noch vollständig: logout.xhtml?app=myApp

logout.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="10" />
        <script type="text/javascript">
            //<![CDATA[
            var param = window.location.search;
            var ref='../welcomePage.xhtml';
            if(param!==null){
                window.location.href=ref+param;
            }else{
                window.location.href=ref;
            }
            //]]>
        </script>
        <title>Page Redirection</title>
    </head>
    <body>
        Sie wurden erfolgreich ausgeloggt und werden automatisch zur Startseite weitergeleitet.

        Sollten Sie nicht automtisch weitergeleitet werden, nutzen Sie bitte den <a href='../welcomePage.xhtml'>link.</a>
    </body>
</html>

Das JavaScript hatte ich schon unmaskiert, mit /*<![CDATA]*/ ... /*]]>*/ maskiert und so wie im Beispiel zusehen.

Was mache ich falsch oder wo liegt mein Denkfehler?

Gib mal mit debug oder einer alert-Box einfach den param aus, ist der null oder was?

Wie genau machst du denn die Weiterleitung: über einen echten header oder “intern”?

ich habe es gerade lokal getestet, zuammenkopiert, wobei es vielleicht nicht allzu viel aussagt wenn das funktioniert,
eine Verzögerung von paar Sekunden willst du aber vielleicht sowieso noch einbauen?

    <html>
        <head>
            <script type="text/javascript">
			window.setTimeout(function() {
				var param = window.location.search;
               var ref='welcomePage.html';
               if(param!==null){
                   location.href=ref+param;
               }else{
                   location.href=ref;
               }
			}, 2000);
               
            </script>
            <title>Page Redirection</title>
        </head>
        <body>
           Oder: <a href='/welcomePage.html'>
        </body>
    </html>

+ 

zweite Datei
    <html>
        <head>
            <title>Welcome Page</title>
        </head>
        <body>
            Welcome Page
        </body>
    </html>

Aufruf
file:///C:/Temp/test.html?x=yab
wird zu
file:///C:/Temp/welcomePage.html?x=yab

funktioniert es wenn man die Logout-Seite des Servers mit explizit eingetippten Parametern aufruft?

Kenne mich mit JS auch nicht so aus, ist das da ein Tippfehler im Forum? Oder steht das so wirklich in Deinem Code (!==)? Ist das vielleicht die Ursache?

Da JavaScript dynamisch typisiert ist, kann man mit !== (wie bei php auch) auf Ungleichheit ohne Typkonversion prüfen. Das passt an dieser Stelle also.

[QUOTE=Bleiglanz]Gib mal mit debug oder einer alert-Box einfach den param aus, ist der null oder was?

Wie genau machst du denn die Weiterleitung: über einen echten header oder “intern”?[/QUOTE]

Die Fragen haben mich in die passene Richtung geschickt. Die Parameter waren tatsächlich null, die Ursache dafür lag aber in der Konfiguration der Anwendung. Es hat nichts mit JavaScript zutun, sondern dass wir vor kurzem Spring-Security integriert haben.

Mein Snippet von oben funktioniert wieder, nachdem ich in unserer applicationContext-security.xml die Zeile <logout logout-url="/logout" logout-success-url="/pages/logout.xhtml" /> in <logout logout-url="/logout" /> geändert hatte.