Struts2(传智播客笔记5)

来源:互联网 发布:c语言怎么ab之间求素数 编辑:程序博客网 时间:2024/06/06 12:51

自定义拦截器

步骤一:创建拦截器
package cn.jbit.struts2.interceptor;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class PermissionInterceptor implements Interceptor {private static final long serialVersionUID = -3438354731949594098L;public void destroy() {}public void init() {}public String intercept(ActionInvocation actioninvocation) throws Exception {String loginUser = (String) ActionContext.getContext().getSession().get("loginUser");if (null != loginUser && "jbit".equals(loginUser)) {return actioninvocation.invoke();}ActionContext.getContext().put("message", "你没有权限访问!");return "message";}}
步骤二:配置拦截器
<!-- 拦截器定义 --><interceptors>    <interceptor name="permission" class="cn.jbit.struts2.interceptor.PermissionInterceptor"/>    <interceptor-stack name="myPermission">        <interceptor-ref name="defaultStack"/>        <interceptor-ref name="permission"/>    </interceptor-stack></interceptors>

输入校验

在struts2中,我们可以实现对action中所有方法进行检验或者对action的指定方法进行检验。
对于输入校验struts2提供了两种实现方法:
1、采用手工编写代码实现。
2、基于XML配置方式实现。

手工编写代码实现对action中所有方法输入校验

1、通过重写validate()方法实现,validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
2、配置input视图,供验证失败后,请求转发失败页面
3、在input视图中使用<s:fielderror/>显示失败信息

手工编写代码实现对action指定方法输入校验

1、通过validateXxx()方法实现,validateXxx()方法只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
2、配置input视图,供验证失败后,请求转发失败页面
3、在input视图中使用<s:fielderror/>显示失败信息

输入校验的流程

1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4、再调用action中的validate()方法。
5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
0 0
原创粉丝点击