要运用struts2的验证框架。没有什么前提条件和配置。只需一个国际化资源文件和验证文件即可。
国际化文件就是struts.xml或struts.proterties文件中配置的,假如是在struts.xml中以常量来配置的。可以这样配置:
<constant name="struts.custom.i18n.resources" value="ApplicationResources,errors" />
那么所有classpath路径下的文件名为ApplicationResources.properties或是errors.properties文件都是struts可以使用的国际化资源文件.作为中文用户再添加一个ApplicationResources_zh_CN.properties即可
验证文件的文件名格式为:Xxx-validation.xml。直接放在action的目录下即可。我总结strus2的验证框架在应用中分为两类。一类是客户端验证,另一类是服务器端验证。由于客户端验证支持得不是很好。个人认为最好是客户端用js框架验证。服务端则交由struts好了。
struts的验证类型用多种。先举一个典型的对复合类型输入项的验证。情形是当acton里有一个复合类型属性,由于它不是简单的基本数据类型。则需在配置两个xml文件
action:
当UserAction.java中有一个User属性时。需在User.java同目录下有一个User-validation.xml
另外,还得在UserAction.java同目录下有一个UserAction-validation.xml:
页面的表单代码如下:
很麻烦的是struts将类型类型转换的错误都缺省的加入到fieldErrors里。这样当我在年龄栏里输入字符串,页面就会出现"Invalid field value for field 'user.age'"而且这个还不受我的资源文件管理。从网上查询得知,原来
struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在 xwork-2.0.x.jar中定义的. com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了
struts2的验证框架比struts1可是进步了不少。但感觉还不是很顺手。进一步学习中。。。
国际化文件就是struts.xml或struts.proterties文件中配置的,假如是在struts.xml中以常量来配置的。可以这样配置:
<constant name="struts.custom.i18n.resources" value="ApplicationResources,errors" />
那么所有classpath路径下的文件名为ApplicationResources.properties或是errors.properties文件都是struts可以使用的国际化资源文件.作为中文用户再添加一个ApplicationResources_zh_CN.properties即可
验证文件的文件名格式为:Xxx-validation.xml。直接放在action的目录下即可。我总结strus2的验证框架在应用中分为两类。一类是客户端验证,另一类是服务器端验证。由于客户端验证支持得不是很好。个人认为最好是客户端用js框架验证。服务端则交由struts好了。
struts的验证类型用多种。先举一个典型的对复合类型输入项的验证。情形是当acton里有一个复合类型属性,由于它不是简单的基本数据类型。则需在配置两个xml文件
action:
package net.apex.ssh.common.web.action;
import java.util.List;
import net.apex.ssh.common.model.User;
import net.apex.ssh.common.service.UserManager;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private UserManager userManager;
private User user;
private List<User> users;
private Integer id;
//setter/getter methods
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
/**
*
*/
public String save(){
userManager.saveUser(user);
return SUCCESS;
}
public String delete(){
if(id!=null){
userManager.deleteUser(id);
}
return this.SUCCESS;
}
public String list(){
users = userManager.getUsers();
return this.SUCCESS;
}
}
当UserAction.java中有一个User属性时。需在User.java同目录下有一个User-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message key="validate.user.name.notnull" />
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message key="validate.user.age" />
</field-validator>
</field>
</validators>
另外,还得在UserAction.java同目录下有一个UserAction-validation.xml:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context"></param>
<param name="appendPrefix">true</param>
<message>用户</message>
</field-validator>
</field>
</validators>
页面的表单代码如下:
<s:form action="saveUser" method="post">
<s:textfield name="user.name" label="姓名:"></s:textfield>
<s:textfield name="user.age" label="年龄:"></s:textfield>
<s:radio name="user.sex" list="#{'1':'男','0':'女'}" label="性别:" value="'1'"></s:radio>
<s:submit></s:submit>
</s:form>
很麻烦的是struts将类型类型转换的错误都缺省的加入到fieldErrors里。这样当我在年龄栏里输入字符串,页面就会出现"Invalid field value for field 'user.age'"而且这个还不受我的资源文件管理。从网上查询得知,原来
struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在 xwork-2.0.x.jar中定义的. com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了
struts2的验证框架比struts1可是进步了不少。但感觉还不是很顺手。进一步学习中。。。