【SSH项目实战】国税协同平台-10.自定义返回结果类型

来源:互联网 发布:xp系统终极优化 编辑:程序博客网 时间:2024/05/17 08:44
捕获到异常以后,我们想利用前面请求的参数做一些事情,我们就可以利用struts的“自定义返回结果类型”。

类“class StrutsResultSupport”就是“struts类结果返回支持”,如果某个类继承了这个父类的话,这个类就会被执行。

可以给这个类传入3个参数:location、parse、encode。

在使用之前,我们先处理一些东西
我们把Action中公用的东西抽出来放在BaseAction中:
[java] view plaincopy
  1. package cn.edu.hpu.tax.core.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public abstract class BaseAction extends ActionSupport{  
  6.     //这里selectedRow是批量操作时的id数组  
  7.     protected String[] selectedRow;   
  8.       
  9.     public String[] getSelectedRow() {  
  10.         return selectedRow;  
  11.     }  
  12.     public void setSelectedRow(String[] selectedRow) {  
  13.         this.selectedRow = selectedRow;  
  14.     }  
  15. }  

然后我们的所有Action都继承BaseAction:
[java] view plaincopy
  1. public class UserAction extends BaseAction{  
  2.     //里面就不再有selectedRow属性  
  3.     //其他代码省略  
  4. }  

好了,开始编写我们的系统的异常结果处理。

我们在核心包下加入系统的异常结果处理类:
[java] view plaincopy
  1. package cn.edu.hpu.tax.core.action;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.apache.struts2.ServletActionContext;  
  7. import org.apache.struts2.dispatcher.StrutsResultSupport;  
  8.   
  9. import com.opensymphony.xwork2.ActionInvocation;  
  10.   
  11. public class SysResultAction extends StrutsResultSupport{  
  12.   
  13.   
  14.     @Override  
  15.     protected void doExecute(String arg0, ActionInvocation invocation)  
  16.             throws Exception {  
  17.         HttpServletRequest request= ServletActionContext.getRequest();  
  18.         HttpServletResponse response= ServletActionContext.getResponse();  
  19.         //得到报错时候上层的action类  
  20.         BaseAction action=(BaseAction)invocation.getAction();  
  21.           
  22.         //request.response,action类你都得到了,可以做你想做的任何操作了  
  23.         System.out.println("进入了SysResultAction...");  
  24.     }  
  25.   
  26.   
  27. }  

然后我们在strust的配置文件strust.xml中定义返回结果类型(也就是在原来的配置基础上增加了result-types):
[html] view plaincopy
  1. <!-- 配置全局结果集异常映射 -->  
  2. <package name="base-default" extends="struts-default">  
  3.     <!-- 返回结果类型 -->  
  4.     <result-types>  
  5.         <result-type name="error" class="cn.edu.hpu.tax.core.action.SysResultAction"/>  
  6.     </result-types>  
  7.       
  8.     <!-- 全局返回结果 -->  
  9.     <global-results>  
  10.         <result name="error" type="error">/WEB-INF/jsp/error.jsp</result>  
  11.         <result name="sysError">/WEB-INF/jsp/error.jsp</result>  
  12.         <result name="input">/WEB-INF/jsp/error.jsp</result>  
  13.     </global-results>  
  14.       
  15.     <!-- 全局异常映射 -->  
  16.     <global-exception-mappings>  
  17.         <exception-mapping result="sysError" exception="cn.edu.hpu.tax.core.exception.SysException"/>  
  18.         <exception-mapping result="input" exception="java.lang.Exception"/>  
  19.     </global-exception-mappings>  
  20. </package>  

我们在Action类的某个出错的方法中return "error";那么就会进入到SysResultAction类中,我们可以在里面进行一些其他事物的处理。

0 0