문제

Grails 응용 프로그램에서는 페이지 A에서 사용자를 보내서 B 페이지의 양식으로 보내고 다시 페이지 A로 다시 보내고 싶습니다.

반환 할 URL을 추적하려면 "ReturnPage"매개 변수를 Page B의 URL을 포함하는 페이지 B로 전송합니다 (페이지 a).

현재 페이지 A의 request.getRequestUrl ()을 사용하여 페이지 A의 URL을 검색하고 있습니다. 그러나 getRequestUrl ()에서 얻은 URL은 최종 사용자가 자신의 주소 표시 줄에 가지고있는 URL에 해당하지 않습니다.

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

"최종 사용자"URL을 어떻게 얻습니까?

도움이 되었습니까?

해결책

정답은 request.forwardURI (자세한 내용은 여기에 있습니다).

다른 팁

현재 URL을 얻기 위해이 방법을 구축했습니다.

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();
}

나는 사용하는 것을 선호한다 :

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

절대 URL을 가져와야 할 때!

상대적인 길을 얻는 것도 흥미 롭습니다.

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

P

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

내 솔루션 (Grails 1.3.7) 은이 제품입니다. 컨트롤러에 복사하여 붙여 넣을 수 있습니다.

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;

우리의 응용 프로그램에서 우리는 만 사용할 수 없습니다 g.createLink(.. absolute:true) 여러 고객으로 인해 최종 사용자 URL이 다르기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top