首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

页面跳转到BackURL效能(基于struts2实现)

2013-11-03 
页面跳转到BackURL功能(基于struts2实现)页面跳转到BackURL功能(基于struts2实现)应用场景:在查询用户列表

页面跳转到BackURL功能(基于struts2实现)
页面跳转到BackURL功能(基于struts2实现)
应用场景:
在查询用户列表/user!list.action时,点击新增用户,将跳转到/user!input.action
现在需要新增成功后跳转到/user!list.action
常规的做法是在UserAction里定义一个Result=RELOAD, location = "user!list.action", type = "redirect"

但是现在有这样的需求:
在查询用户列表/user!list.action,作了一些查询,分页的操作后,可能你的页面地址就变成了:
/user!list.action?page.no=5&page.size=20&searchParam=searchValue
如果此时你点击新增用户,需要新增完毕仍回到刚才操作过的页面,因为这个页面地址已经无法预料,你无法再Action里配置

所以现在需要实现这样的功能,能方便跳回之前操作的页面

目前实现的大致思路如下:

1.首先当跳转到新增页面时,一定要把跳回的URL地址带上,如:
/user!input.action?BackURL=/user!list.action?page.no=5&page.size=20&searchParam=searchValue
带上的地址为了不影响浏览器解析原地址,已改将BackURL的值URL Encode如下
/user!input.action?BackURL=%2Fuser%21list.action%3Fpage.no%3D5%26page.size%3D20%26searchParam%3DsearchValue

2.当新增页面提交时,要将BackURL一并提交给服务器,所以最简单的做法是在Form表单加上一个隐藏域:
<input type="hidden" name="BackURL" value="${param['BackURL']}">

或者提交表单时动态修改提交的URL为/user!save.action?BackURL=%2Fuser%21list.action%3Fpage.no%3D5%26page.size%3D20%26searchParam%3DsearchValue

3.新增用户页面/user!input.action会将请求提交给UserAciton的save方法处理

public class BackURLPreResultListener implements PreResultListener {@Overridepublic void beforeResult(ActionInvocation invocation, String resultCode) {// handle backUrlHttpServletRequest request = ServletActionContext.getRequest();if (Boolean.TRUE.equals(request.getAttribute(Const.ENABLE_BACK_URL))) {String backURL = extractBackURL(request);if (StringUtils.isNotBlank(backURL)) {//此处不使用response.sendRedirect来重定向,主要是为了利用struts2拦截器MessageStoreInterceptor的便利,即重定向后,actionMessage里的数据都不会丢失的功能//ServletActionContext.getResponse().sendRedirect(backURL);ServletActionContext.getRequest().setAttribute("backUrl", backURL);invocation.setResultCode("backUrl");}}}}


热点排行