在Grails中获取当前页面的URL

在Grails中获取当前页面的URL,grails,Grails,在Grails应用程序中,我希望将用户从a页发送到B页的表单,然后再返回a页 为了跟踪要返回到哪个URL,我将一个“returnPage”参数发送到包含要返回到的页面URL的页面B(页面a) 目前,我正在使用页面A上的request.getRequestURL()检索页面的URL。但是,我从getRequestURL()获取的URL与最终用户在其地址栏中的URL不对应: request.getRequestURL() == "http://localhost:8080/something/WEB

在Grails应用程序中,我希望将用户从a页发送到B页的表单,然后再返回a页

为了跟踪要返回到哪个URL,我将一个“returnPage”参数发送到包含要返回到的页面URL的页面B(页面a)

目前,我正在使用页面A上的request.getRequestURL()检索页面的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
()。

创建指向页面B的链接时,可以使用createLink标记设置returnPage参数:

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

转到B页

我构建此方法是为了获取当前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();
}
静态字符串getCurrentUrl(HttpServletRequest请求){
StringBuilder sb=新的StringBuilder()
sb我的解决方案(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(…绝对值:true)
,因为我们有不同的最终用户URL,因为有多个客户。

我更喜欢使用:

createLink(action: "index", controller:"user", absolute: true)
// http://localhost:8080/project/user
当我需要得到一个绝对的网址

获取相对路径也很有趣:

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

链接现在已断开。请参阅,无需转到
javax
属性,您可以通过
请求获得相同的结果。如果站点使用https,forwardURI
fromIndex需要从7更改为8。这完全忽略URI中的参数。