Frage

In einer Grails -Anwendung möchte ich einen Benutzer von Seite A, dann an ein Formular auf Seite B und dann wieder auf Seite A senden.

Um zu verfolgen, welche URL zu einem Parameter "returnpage" an Seite B sende, das die URL der Seite enthält, um zu (Seite A) zurückzukehren.

Derzeit verwende ich Request.getRequesturl () auf Seite A, um die URL der Seite abzurufen. Die URL, die ich von GetRequesturl () bekomme, entspricht jedoch nicht der URL, die der Endbenutzer in seiner Adressleiste hat:

request.getRequestURL() == "http://localhost:8080/something/WEB-INF/grails-app/views/layouts/main.gsp"
URL in address bar == "http://localhost:8080/something/some/thing"

Wie bekomme ich die URL "Endbenutzer"?

War es hilfreich?

Lösung

Die Antwort ist request.forwardURI (Details hier).

Andere Tipps

Ich habe diese Methode erstellt, um die aktuelle URL zu erhalten.

static String getCurrentUrl(HttpServletRequest request){

    StringBuilder sb = new StringBuilder()

    sb << request.getRequestURL().substring(0,request.getRequestURL().indexOf("/", 8))

    sb << request.getAttribute("javax.servlet.forward.request_uri")

    if(request.getAttribute("javax.servlet.forward.query_string")){

        sb << "?"

        sb << request.getAttribute("javax.servlet.forward.query_string")
    }

    return sb.toString();
}

Ich liebe es zu verwenden:

createLink(action: "index", controller:"user", absolute: true)
// http://localhost:8080/project/user

Wenn ich eine absolute URL bekommen muss!

Es ist interessant, auch einen relativen Weg zu finden:

createLink(action: "index", controller:"user")
// /project/user

Wenn Sie den Link zu Seite B erstellen, können Sie das CreateLink -Tag zum Festlegen des Parameters returnPage festlegen:

<g:link controller="pageB" 
        action="someaction" 
        params='[returnPage:createLink(action:actionName, params:params)]'>
  Go to Page B
</g:link>

Meine Lösung (Grails 1.3.7) ist diese, die Sie kopieren und in Ihren Controller einfügen können:

boolean includePort = true;
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = (new org.springframework.security.web.PortResolverImpl()).getServerPort(request)
String contextPath = request.getContextPath();
boolean inHttp = "http".equals(scheme.toLowerCase());
boolean inHttps = "https".equals(scheme.toLowerCase());

if (inHttp && (serverPort == 80)) {
    includePort = false;
} else if (inHttps && (serverPort == 443)) {
    includePort = false;
}
String redirectUrl = scheme + "://" + serverName + ((includePort) ? (":" + serverPort) : "") + contextPath;

In unserer Anwendung können wir nicht einfach verwenden g.createLink(.. absolute:true) Weil wir aufgrund mehrerer Kunden unterschiedliche Endbenutzer-URLs haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top