回顾
一、输入验证
客户端和服务器端验证
1、编程式验证
前提:动作类继承ActionSupport
a、针对动作类中的全部动作方法
public void validate(){
//针对不符合条件的
addFieldError(字段名,提示信息);
}
b、针对动作类中的某个/些动作方法
public void validateXxx(){Xxx动作方法首字母大写后的
}
使用@SkipValidation注解
验证不通过:
会转向一个input的逻辑视图,一般指向输入页面。回显数据最好用struts2的标签。
错误消息提示:动作类名.properties invalid.fieldvalue.字段名=你的提示
2、声明式验证
a、针对动作类中的全部动作方法
在动作类所在的包中,添加验证文件:动作类名-validation.xml
b、针对动作类中的某个/些动作方法
在动作类所在的包中,添加验证文件:动作类名-动作名(配置文件中的)-validation.xml
配置文件中,验证的字段名和表单的name保持一致即可。
原理:是由validation、workflow拦截器负责处理。
3、Struts2内置的验证器
xwork-core-**.jar com.opens.......validators\default.xml
4、自定义声明式验证器
a、编写一个类,继承FieldValiateSupport
b、在构建路径顶端建立validtors.xml的配置文件。声明验证器
c、可以像使用内置验证器的形式去使用了。
二、国际化:i18n
三、拦截器
1、这部分是struts2的功能核心
2、自定义拦截器:执行过程
a、编写一个类,继承AbstractInterceptor
b、声明拦截器
c、在动作中使用:使用了任何一个拦截器,默认的将失效。
3、小案例:
动作方法执行前,验证用户是否登录拦截器。对动作类中的所有动作方法进行拦截
4、MethodFilterInterceptor:可以指定哪些方法被拦截或不被拦截
5、struts2中常用的拦截器
四、文件上传
动作类书写有要求:
private File photo;//和表单的上传输入域名字保持一致
private String photoFileName;
private String photoContentType;
配置拦截器:参数。
一、多文件上传
二、文件下载:结果类型的使用
名字为stream的结果类型处理文件下载。
1、动作类的书写遵守一定的规范
2、struts.xml配置文件
三、OGNL表达式简介
前提:在struts2中要使用OGNL表达式,必须放到Struts2的标签中。
1、OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,
它是一个开源项目。webwork用它作为表达式语言。
2、其他重要的功能
a、支持对象方法调用,如xxx.doSomeSpecial();
b、支持类静态的方法调用和值访问
c、访问OGNL上下文(OGNL context)和ActionContext;
d、操作集合对象。
四、context上下文:数据中心
contextmap中的数据
动作类的生命周期:每次访问都会重新创建新的动作类的实例。还会创建ActionContext和ValueStack的实例。ActionContext和
ValueStack一直保持在你的线程中。(ThreadLocal)。
1、ActionContext的API:操作contextMap中的数据的
PS:ContextMap是xwork中的东西,struts2的核心就是xwork中的ognl,但是为了方便使用,所以就在ContextMap的基础上添加了root栈,ContextMap和root栈组成了值栈,值栈如下图所示:
2、ValueStack的API:操作contextMap中根的数据
ValueStack的常用方法:
五、OGNL的其他用法
1、在JSP中使用ONGL显示contextMap/根中的数据
获取contextMap中的数据,OGNL表达式要用#开头
获取根(List)中的对象的属性,直接写属性的名称。会从栈顶的对象一致往下找。
2、OGNL的其他用法
a、在JSP中取数据,可以使用OGNL表达式,也可以使用EL表达式
EL表达式在Struts2中,被做了小小的改动。
Struts2对原始的HttpServletRequest(服务器提供)进行包装,
org.apache.struts2.dispatcher.StrutsRequestWrapper
b、在JSP页面中利用OGNL构造List对象和Map对象
c、字符串和OGNL互换
d、在配置文件中xml或properties也可以使用OGNL表达式,请使用${ognl}
六、Struts2中的常用标签
常用的通用标签
防止表单重复提交:超简单
Struts2和Spring集成