1.EL表达式的问题
EL访问信息的顺序为page,request,action,session,application
1)在Struts2环境中,可以使用EL表达式访问action对象信息.
2)原因如下
public class StrutsRequestWrapper extends HttpServeltRequestWrapper{
//重写
public Object getAttribute(Object key){
Object retVal = null;
//从原request对象中获取
retVal = super.getAttribute(key);
if(retVal == null){
//取不到,再去ValueStack中获取
//因为key没有加#号,所以去root查找到action对象属性值
retVal = ValueStack.findValue("key");
}
return retVal;
}
}
2.类型转换
主要解决表单提交的内容和Action属性类型之间的差异.
1)默认支持的类型转换
表单------>Action属性
String------->String
String------->int,Integer,double,Double
String[]-------->String[],List<String>,Integer[],List<Integer>
String-------->boolean,Boolean
String-------->Date
多个String------->User对象,Person对象
2)自定义类型转换(自学-略)
需要实现TypeConverter接口,重写convertValue方法
3.拦截器
1)拦截器的特点(作用)
a.可以在Action业务方法执行前和后调用
b.拦截器和Action的关系可以通过XML配置指定
c.通常可以将一些共通的逻辑,使用拦截器封装.
例如权限检查,日志记录,事务控制等
2)如何自定义拦截器,如何使用
a.编写拦截器组件,实现Interceptor接口.
实现该接口的interceptor方法,在该方法中添加逻辑
b.在struts.xml中配置拦截器组件
c.使用拦截器组件<interceptor-ref name="拦截器名"/>
注意:如果为Action组件指定了拦截器,需要显式引用defaultStack拦截器
d.如果拦截器功能需要方法过滤,(即某些方法执行,某些方法不执行)
可以继承MethodFilterInterceptor,然后重写doInterceptor
之后在struts.xml中使用以下配置指定哪些方法执行.
<param name="includeMethods">add,update,delete</param>