针对这个话题,下面是一份完整攻略。
Struts2学习笔记(6)-简单的数据校验
前言
在Struts2中,数据校验是开发过程中不可缺少的一部分,而Struts2提供了全面而且灵活的校验机制来实现数据校验。在这篇文章中,我们将介绍Struts2中简单的数据校验。
配置数据校验
Struts2的校验机制主要是通过在Action类中定义方法进行校验,校验方法必须在Action类中具有如下的特点:
- 公有方法,且没有参数
- 方法名称为
validate
+属性名,例如:validateName()、validateAge(),其中属性名一般对应Action中的属性
校验方法的返回值为void
,在校验失败的情况下,需要将错误信息添加到Action类中的一个Map<String, List<String>>
类型的成员变量fieldErrors
中。
在Struts2中,校验方法的配置也很简单,只需要在struts.xml文件中对需要进行校验的Action类进行配置即可。
例如,我们在struts.xml中对UserAction
类的username
属性进行校验,配置如下:
<action name="userAction" class="com.example.UserAction">
<result name="success">/user.jsp</result>
<result name="input">/login.jsp</result>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">execute,input</param>
</interceptor-ref>
<field name="username">
<field-validator type="requiredstring">
<message>用户名不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<message>用户名至少要6个字符!</message>
</field-validator>
</field>
</action>
在上面的配置中,username
属性通过两种不同的方法进行校验,一次是使用了requiredstring
验证器,另一次是使用了stringlength
验证器。
编写校验方法
在Action类中,我们需要为需要进行数据校验的属性编写校验方法。例如,我们在UserAction
类中需要对username
属性进行校验,那么我们需要编写一个名为validateUsername
的方法。
public void validateUserName(){
String userName = getUser().getUserName();
if(StringUtils.isEmpty(userName)){
addFieldError("user.userName", "用户名不能为空");
} else if(userName.length() < 6) {
addFieldError("user.username", "用户名长度必须大于等于6");
}
}
在上面的代码中,我们先判断了userName
是否为空,如果为空,则调用addFieldError
方法将错误信息添加到fieldErrors
成员变量中。在addFieldError
方法中,第一个参数是错误信息的属性名称,该名称必须使用形如<namespace>.<property>
的完全限定名,其中<namespace>
是Action类中的namespace
,如果省略则默认为""
,而<property>
则是需要进行校验的属性名。第二个参数则是错误信息的具体内容。
示例一:验证邮箱地址格式
首先,我们需要编写一个User
类表示用户信息,其中包含了一个email
属性。通过Struts2框架的数据校验机制,实现对用户邮箱地址的格式合法性校验。
-
在
User
类中添加email
属性。java
private String email; -
编写校验方法。
java
public void validateEmail(){
if(StringUtils.isEmpty(getEmail())){
addFieldError("user.email", "邮箱不能为空");
return;
}
if(!Pattern.matches("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-\\.)?)+[a-z0-9A-Z]+\\.([a-zA-Z]{2,4})$", getEmail())){
addFieldError("user.email", "邮箱格式错误,请输入正确的邮箱地址");
}
}在上述代码中,我们使用了
StringUtils
类和Java的正则表达式来判断邮箱地址是否合法。如果邮箱地址为空,则直接将错误信息添加到fieldErrors
成员变量中,否则使用正则表达式进行格式校验,如果不匹配则同样将错误信息添加到fieldErrors
成员变量中。 -
在Struts2的
struts.xml
文件中对UserAction
类进行校验配置。xml
<action name="validateEmailAction" class="com.example.UserAction">
<result name="success">/user.jsp</result>
<result name="input">/login.jsp</result>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">execute,input</param>
</interceptor-ref>
<field name="email">
<field-validator type="email">
<message>邮箱格式错误,请输入正确的邮箱地址</message>
</field-validator>
</field>
</action>在上述代码中,我们使用了
email
类型的验证器来校验email
属性的格式。如果不符合邮箱地址的基本格式,则返回错误信息。 -
在JSP页面中添加邮箱地址输入框。
html
<s:form action="validateEmailAction">
<s:textfield label="邮箱地址" name="user.email" />
<s:submit />
</s:form>在上述代码中,我们使用了
<s:textfield>
标签来创建一个邮箱地址的输入框,并指定了该输入框对应的属性名称为user.email
。
示例二:校验密码和确认密码是否一致
制作一个修改个人密码的页面,并对其进行校验,校验密码和确认密码是否一致。
-
在
User
类中添加password
和confirmPassword
属性。java
private String password;
private String confirmPassword; -
编辑校验方法。
java
public void validateUpdatePassword(){
if(StringUtils.isEmpty(getPassword())){
addFieldError("user.password", "密码不能为空");
}
if(StringUtils.isEmpty(getConfirmPassword())){
addFieldError("user.confirmPassword", "确认密码不能为空");
}
if(!getPassword().equals(getConfirmPassword())){
addFieldError("user.confirmPassword", "两次输入的密码必须相同");
}
}在上述代码中,我们分别判断了密码和确认密码是否为空,以及两者是否相同。如果不符合条件,则将错误信息添加到
fieldErrors
成员变量中。 -
在Struts2的
struts.xml
文件中对UserAction
类进行校验配置。xml
<action name="updatePasswordAction" class="com.example.UserAction">
<result name="success">/success.jsp</result>
<result name="input">/updatePassword.jsp</result>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">execute,input</param>
</interceptor-ref>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<field name="confirmPassword">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>确认密码不能为空</message>
</field-validator>
</field>
</action>在上述代码中,我们对
password
和confirmPassword
属性分别使用了requiredstring
验证器进行校验。通过设置trim
参数为true
,可以自动将输入框中的前后空格去除。 -
在JSP页面中添加两个密码输入框。
html
<s:form action="updatePasswordAction">
<s:password label="新密码" name="user.password" />
<s:password label="确认密码" name="user.confirmPassword" />
<s:submit />
</s:form>
在完成上述步骤之后,我们就可以测试上述的两个示例代码了。在测试过程中,我们可以尝试输入不同的数据,验证数据校验机制的正确性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2学习笔记(6)-简单的数据校验 - Python技术站