您的位置:首页 > 编程语言 > Java开发

Struts2对表单提交数据的验证

2016-10-20 22:29 435 查看
对表单数据的验证,分为

客户端验证。服务器端验证。

我们要看的呢,就是服务器端验证:

1:编程式验证:写代码验证,写死了,硬编码

2:声明式验证:写xml文件验证

编程式验证

编程式验证:重写ActionSupport中的public void validate()方法

Struts2内部封装了一个Map,Map的键就是表单上的name的值

Map的值就是错误信息

注意:动作类必须继承ActionSupport

public class UserAction extends ActionSupport implements ModelDriven<User> {

private User user = new User();
private UserService userService = new UserServiceImpl();

@Override
public void validate() {
//验证用户名不能为空
//"".equals(user.getUsername().trim()) || user.getUsername()==null
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username", "用户名不能为空");
}
}

public String regist()
{
//判断用户是否存在
User hu = userService.findUserByUserName(user.getUsername());
if(hu!=null){
return "exists";
}
//把用户添加到数据库
int result = userService.regist(user);
if(result>0)
return "success";

return null;
}

@Override
public User getModel() {

return user;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}


这样,当我们提交表单时,若username为空的话,就会在表单上得到回显的错误信息。

但是这种方法有问题:

默认:validate()方法在所有动作方法之前执行

那么就算去执行其他的action,这里还是会执行validate方法进行验证

为了让不需要验证不去执行 validate方法,解决方式有两种:

1:使用注解:@SkipValidation

2: 验证的方法名:validate+动作方法名( 首字母要大写)

对于这两种方法:

第一种,在动作类的其它方法上加@SkipValidation标签,那么这个方法就会跳过验证。

第二种方法,在需要验证的方法,将其方法名修改,这样,验证时就只验证该动作方法。


简单看一下代码

也就是下面的两种设置方法。

public void validateRegist() {
//验证用户名不能为空
//"".equals(user.getUsername().trim()) || user.getUsername()==null
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username", "用户名不能为空");
}
}

@SkipValidation
public String show()
{
return "success";
}


声明式验证

对于编程式验证,代码是写死的,我们一半会用更灵活的声明式验证。

声明式验证:通过xml文件实现验证

在动作类所在的包下创建xml文件

文件名有命名规则:动作类名-vlidation.xml,默认验证动作类中的所有动作方法

希望某些方法不被验证:1.加注解 @SkipValidation

2.xml文件名改成 动作类名-动作名-vlidation.xml *

在xml文件中加入dtd约束:在xwork-core.jar包中找到xwork-validator-1.0.3.dtd

下面看我们配置的UserAction-regist-validation.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!--  基于字段的验证 -->
<field name="username">
<!-- 怎么验证 , struts内部已经定义了很多的验证器
requiredstring判断是否为null,或空字符串,去除空格
-->
<field-validator type="requiredstring">
<message>用户名不能为空</message><!--  -->
</field-validator>
</field>

<!-- 基于验证器的验证 -->
<validator type="requiredstring">
<!-- 使用注入的方式指明验证谁
private String actionName;
setActionName("action1");
验证器的位置:xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators
-->
<param name="fieldName">password</param>
<message>密码不能为空</message>
</validator>
</validators>


这样就完成了对username和password非空的验证。



为了对声明式验证更多点了解,我们看一个对验证注册信息的xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>

<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">70</param>
<message>年齡必須在18到70之間</message>
</field-validator>
</field>

<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>

<field name="password">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">8</param>
<message>密码长度必须在3--8位之间</message>
</field-validator>
</field>
<!-- 确认密码需要和密码一致,所以使用验证器验证 -->
<validator type="expression">
<param name="expression">
<![CDATA[
password==repassword
]]>
</param>
<message>确认密码要和密码一致</message>
</validator>

<field name="score">
<field-validator type="regex">
<param name="regex">
\d+
</param>
<message>成绩必须是正整数</message>
</field-validator>
</field>

<field name="url">
<field-validator type="url">
<message>输入正确的url地址</message>
</field-validator>
</field>

<field name="gender">
<field-validator type="required">
<message>请选择性别</message>
</field-validator>
</field>

</validators>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息