js保存当前路径

      曾经做了一个取消订单的功能。这个功能在个人中心里面有,在订单的详细页面也有。按照正常的思路,这两块都可以提交到相同的action去处理,但是返回的页面是不一样的,都是返回到当前页面就可以了。简单地说,就是在个人中心页面,该客户点击取消订单,提交到某个action,进行数据库的操作,将一张表中的字段值改变,然后重新返回到个人中心页面,只是那里的“取消”按钮变成了灰色的“已取消”就OK了,而在订单的详细页面,也是相同的,提交到相同的acion,但是返回页面不是个人中心页面,而是订单的详细页面。

      这时候可以考虑用js保存当前路径,写到cookie中,在acion中获取到该路径,通过get/set方法,只需要在<result></result>中写上该路径的el表达式就行了。

      代码如下:

<script type="text/javascript">
    function saveUrlAndGo(url, form) {
    document.cookie = "returnUrl=" + escape(location.pathname + location.search);
	if (form) {
		form.action = url;
		form.submit();
	} else {
		location.href = url;
	}
}

</script>

        

         因此只要在action中配置好returnUrl,就可以很方便地解决这个问题,而不必写两个action了。

         java代码如下:

 

action读取cookie
public String getReturnUrl()
{
HttpServletRequest request
= ExecuteContext.getContext().getHttpContext().getRequest();
Cookie[] cookies
= request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("returnUrl".equalsIgnoreCase(cookie.getName())) {
String context
= request.getContextPath();
String value
= cookie.getValue();
if ((TextUtils.isNotEmpty(context)) && (value.startsWith(context)))
value
= value.substring(context.length());
try
{
return URLDecoder.decode(value, "UTF-8");
}
catch (UnsupportedEncodingException e) {
return value;
}
}
}
}
return null;
}

 

 

      这里做了一下判断,因为可能会有不同的目录存入cookie,因此要拿到当前的目录。

      ExecuteContext这个类在我们公司是一个公共类,它的代码如下:

     

代码
public class ExecuteContext
{
private static final ThreadLocal threadLocal = new ThreadLocal();
private HttpContext httpContext;
private IdentityContext identityContext;

ExecuteContext(HttpContext httpContext, IdentityContext identityContext)
{
this.httpContext = httpContext;
this.identityContext = identityContext;
}

public static ExecuteContext getContext() {
return (ExecuteContext)threadLocal.get();
}

public static void setContext(ExecuteContext context) {
threadLocal.set(context);
}

public IdentityContext getIdentityContext() {
return this.identityContext;
}

public HttpContext getHttpContext() {
return this.httpContext;
}
}

 

posted on 2010-12-14 20:03  大空翼  阅读(2069)  评论(0编辑  收藏  举报

导航