Struts2获取请求参数
1属性驱动
1 直接将action 作为model 就可以得到请求参数
每一次的请求 都会产生一个新的action 缺点:需要单独定义javaBean,将action中的属性转到javaBean中
底层是通过反射实现的
2 在action中声明一个model
private User user; 提供get/set方法
在页面上使用ognl来描述 <input type="text" name="user.username">
通过struts2中的名为params的interceptor进行数据封装
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor">
缺点:在页面上使用了ognl表达式,页面无法通用。
2模型驱动(开发中应用)
在action中 implements ModelDriven接口
在action中 override getModel方法
在action中实现 model对象 然后让getModel方法返回这个对象
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();
public User getModel(){
return user;
}
}
缺点:一次只能封装一个model对象
将请求参数封装到集合中
将请求参数封装在list中 map中
页面 username:<input type="text"name="user[0].username"><br>
password:<input type="password"name="user[0].password"><br>
username2:<input type="text"name="user[1].username"><br>
password2:<input type="password"name="user[1].password"><br>
action类中
private List<User> users; private Map<String,User> map;
get/set 方法
类型转换
struts内部提供大量类型转换器
boolean和Boolean char和Character int和Integer long和Long float和Float double和Double
Date 可以接收 yyyy-MM-dd格式字符串 数组 集合
类型转换器根接口 com.opensymphony.xwork2.conversion.TypeConverter.
自定义类型转换器
1 创建类实现TypeConverter接口 2 override接口中的方法 实现类型转换操作
方法一
implements TypeConverter 重写convertValue方法
方法二
extends DefaultTypeConverter类 重写convertValue方法
方法三
继承DefaultTypeConverter类的一个子类 StrutsTypeConverter 重写 convertFromString 与convertToString 方法
3 注册类型转换器
方法一 局部 在Action类所在包下 配置action类名-conversion.properties
配置文件格式 属性名称=类型转换器全类名
方法二 局部 在model类所在包下 创建model类名-conversion.properties
配置文件格式 属性名称=类型转换器全类名
方法三 全局 在src下 创建xwork-conversion.properties
配置文件格式 要转换的类型全名称类型转换器的全类名
类转换器机制
如果表单数据向model封装出现 no result defined for action .....and result input错误
原因:当类型转换出现问题时,name为conversionError的interceptor会存储错误信息
在前面的拦截器出现问题时,workflow拦截器就会得到问题然后直接跳转到input视图
配置错误信息展示<%taglib prefix="s" url="/struts-tags"%> <s:fielderror/>
自定义类型转换器,出现类型转换问题,要跳转到input视图,必须抛出异常才可以。
数据校验
struts2提供 服务器端校验
两种方式 1 手动校验 2 配置校验
手动校验(编码校验)
要求action继承 ActionSupport类 重写validate方法 使用this.addFieldError("username.message","用户名不能为空");
在页面中 使用<s:fielderror fieldName=" username.message"/>展示特定的错误信息
用于处理validate的拦截器 validation
在struts-default.xml中拦截器validation 在 params之后,workflow之前,如果validation拦截器向action中存储了错误信息,workflow就会跳转到input视图。
在一个action中有多个请求处理方法 ,创建方法名称为 validate+请求访问名 如请求访问方法为 login() 校验方法为 validateLogin()
配置校验
要求action继承ActionSupport 很多校验规则代码已经写好了,只需要在xml文件中定义数据所使用校验规则就可以了
配置文件位置:xml文件与action类在同一个包下
名称:action类名-validation.xml
约束:位于xwork-core下的 dtd文件
书写:根元素<validators> <field name=”username“> <field-validator type="requiredstring"> <message> 错误信息</message>
<field-validators>子元素 <param name=""></param> 用于指定校验器中的参数
<field-validators type="stringLength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名必须在${minLength}-${maxLength}位之间</message>
</field-validators>
常见的校验器
* required (必填校验器,要求被校验的属性值不能为null)
* requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
* stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
* regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
* int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
* double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
* fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
* email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
* url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
* date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
校验器命名规则
对action进行校验 action类名-validation.xml
对action类中的某一个方法 进行校验 action类名-action名称-validation.xml