struts检验
来源:互联网 发布:python counter 升序 编辑:程序博客网 时间:2024/04/29 11:48
struts2对用户输入数据的校验方法有两种方式,一种是通过编码的方式,另一种则是通过使用XML配置方式。
本章主要介绍struts2编码方式的输入校验。以下将结合一个实例程序进行说明。
代码结构:
关键代码:
RegistAction.java
regist.jsp
struts.xml
RegistAction.properties:
struts2的ActionSupport提供了validate这种输入校验方法用于对用户输入的数据进行检验,在将用户数据传递到具体的action处理方法(toRegist)前会先调用validate方法进行输入校验,同时用户也可以自己定义对应方法(toRegist)的校验方法(validateToRegist),另外,struts2也提供了内置类型转换功能(例如:传递一个非数字给age(Integer),传递非日期类型给birthday(Date)),调用顺序:内置类型转换->validateToRegist->validate->toRegist
如果未定义特地的处理方法(toRegist)将使用默认的execute方法,这时如果想要定制检验方法,可以自定义一个validateExecute方法进行检验,将validate方法空实现。
当struts2用户输入数据传递到后台进行内置类型转换时,如果转换失败,默认的提示信息如下:
这时如果我们想要定制提示信息可以在对应的Action的目录下添加一个Action类名.properties文件(RegistAction.properties)更改默认的提示信息,命名方式为:invalid.fieldvalue.检验对象=提示信息 如:invalid.fieldvalue.birthday=出生日期格式错误,因为properties文件对中文需转换为Unicode编码,所以最好使用IDE自带的properties文件编辑模式,会自动将对应的中文转换为Unicode编码。
修改默认提示信息后:
struts2中的检验错误默认两种:ActionError、FieldError。其中ActionError是Action级别的错误,FieldError是属性错误。可以通过addActionError和addFieldError添加这两类检验错误的提示信息,addFieldError有两个参数,分别是:属性名、提示信息。展示页面可以通过struts2标签<s:actionerror />显示ActionError,<s:fielderror />显示FieldError。另外,如果展示页面使用struts2的标签容纳属性输入,那么该属性的检验错误信息会默认显示在对应属性标签上。
以下是实例程序的实际运行效果:
原理解析:
ActionSupport双继承了Validateable和ValidationAware接口,validate()是Validateable接口中的方法,我们继承Validateable接口,实现validate()就可以在调用Action的execute()方法之前,执行validate()方法进行数据检验。
ActionSupport中有一个属性对象validationAware ,用于存放错误信息:
private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
public void addActionError(String anErrorMessage) {
validationAware.addActionError(anErrorMessage);
}
public void addActionMessage(String aMessage) {
validationAware.addActionMessage(aMessage);
}
public void addFieldError(String fieldName, String errorMessage) {
validationAware.addFieldError(fieldName, errorMessage);
}
而ValidationAwareSupport对象中,错误信息实际是存放在几个集合中:
private Collection<String> actionErrors;
private Collection<String> actionMessages;
private Map<String, List<String>> fieldErrors;
private Map<String, List<String>> internalGetFieldErrors() {
if (fieldErrors == null) {
fieldErrors = new LinkedHashMap<String, List<String>>();
}
return fieldErrors;
}
public synchronized void addFieldError(String fieldName, String errorMessage) {
final Map<String, List<String>> errors = internalGetFieldErrors();
List<String> thisFieldErrors = errors.get(fieldName);
if (thisFieldErrors == null) {
thisFieldErrors = new ArrayList<String>();
errors.put(fieldName, thisFieldErrors);
}
thisFieldErrors.add(errorMessage);
}
public synchronized boolean hasActionErrors() {
return (actionErrors != null) && !actionErrors.isEmpty();
}
public synchronized boolean hasFieldErrors() {
return (fieldErrors != null) && !fieldErrors.isEmpty();
}
public synchronized boolean hasErrors() {
return (hasActionErrors() || hasFieldErrors());
}
- struts检验
- struts检验
- struts的检验
- Struts 2 输入检验
- struts里的检验问s
- struts检验信息格式与反馈
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
- 前端利用ajax后台用struts实现账号唯一性检验
- T检验、F检验
- 电子产品检验-检验中心
- 检验报告
- 共轭检验
- 游程检验
- 相关性检验
- 独立性检验
- 共轭检验
- 检验方法
- xenserver7 安装GLUSTERFS
- Codeforces Round #268 (Div. 2) D. Two Sets
- POJ:2914 Minimum Cut(暴力枚举并查集)
- hdoj5326
- linux线程同步:条件变量
- struts检验
- JTextArea设置滚动条
- 【编程之法】最大连续子数组和
- listview上的CursorAdapter使用
- HDU 1142 A Walk Through the Forest (dijkstra+记忆化搜索)
- Linux Smack 学习总结
- 自动装箱(autoboxing)与自动拆箱语(auto-unboxing)法糖
- poj3393
- EasyUI 树形菜单网格