Struts2的验证框架简单吗?
2024-09-06 02:26:10
Struts2验证框架是基于Struts拦截器开发的,具有良好的扩展性;一般的验证都可以支持。现在我们以一个注册验证的例子进行总结:
新建一个model,User:
public class User {
private String userName;
private String name;
private int age;
private String email;
private String homePage;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getHomePage() {
return homePage;
}
public void setHomePage(String homePage) {
this.homePage = homePage;
}
@Override
public String toString() {
return "User [userName=" + userName + ", name=" + name + ", age=" + age
+ ", email=" + email + ", homePage=" + homePage + "]";
}
}
写RegisterAction.java类:
public class RegisterAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println("传入的用户:"+user);
return SUCCESS;
}
}
写一下RegisterAction的验证框架:
RegisterAction-validation.xml validation.xml文件名要注意和Action名一样!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.userName">
<field-validator type="requiredstring">
<message>请输入用户名</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>用户名必须在${minLength}和${maxLength}之间</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="min">18</param>
<message>年龄必须满18周岁</message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring">
<message>请输入邮件</message>
</field-validator>
<field-validator type="email">
<message>邮件格式不对</message>
</field-validator>
</field>
<field name="user.homePage">
<field-validator type="requiredstring">
<message>请输入主页</message>
</field-validator>
<field-validator type="url">
<message>主页格式不对</message>
</field-validator>
</field>
//验证表达式
<validator type="expression">
<param name="expression"><![CDATA[!user.name.equal(user.userName)]]></param>
<message>用户名和真实姓名不能相同!</message>
</validator>
</validators>
在struts.xml中配置:
<struts>
<package name="manager" extends="struts-default">
<action name="registerAction" class="com.java1234.action.RegisterAction">
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
注册页面register.jsp:
<body>
<s:actionerror/> //可以将验证表达式的值输出;
用户注册
<s:form action="/registerAction" method="post">
<s:textfield name="user.userName" label="用户名"></s:textfield>
<s:textfield name="user.name" label="真实姓名"></s:textfield>
<s:textfield name="user.age" label="年龄"></s:textfield>
<s:textfield name="user.email" label="邮件"></s:textfield>
<s:textfield name="user.homePage" label="主页"></s:textfield>
<s:submit value="注册"></s:submit>
</s:form>
</body>
success.jsp页面:
<body>
注册成功
</body>
开始验证:
其中struts的默认的Validators:
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
现在我们自创建检查敏感词汇的验证器ValidationAction:
public class ValidationAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
System.out.println("姓名:"+name);
return SUCCESS;
}
}
ValidationAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
<field-validator type="sensitive">
<message>有敏感词汇!</message>
</field-validator>
</field>
</validators>
Validators配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>请输入姓名</message>
</field-validator>
<field-validator type="sensitive">
<message>有敏感词汇!</message>
</field-validator>
</field>
</validators>
设置验证器SensitiveWordValidators:
public class SensitiveWordValidators extends FieldValidatorSupport{
@Override
public void validate(Object object) throws ValidationException {
// TODO Auto-generated method stub
//获取输入的用户字段
String fieldName=this.getFieldName();
String value=this.getFieldValue(fieldName, object).toString();
if(!check(value)){
this.addFieldError(fieldName, object);
}
}
public boolean check(String value){
String sensitive[]={"王八","tmd","md"};
for(int i=0;i<sensitive.length;i++){
if(value.indexOf(sensitive[i])>-1){
return false;
}
}
return true;
}
}
在validators.xml中加入:
<validator name="sensitive" class="com.java1234.Validators.SensitiveWordValidators"/>
配置struts.xml:
<struts>
<package name="manager" extends="struts-default">
<action name="validationAction" class="com.java1234.action.ValidationAction">
<result name="input">/validation.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
创建validation.jsp文件:
自定义验证
<s:form action="/validationAction" method="post">
<s:textfield name="name" label="姓名"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
验证结果:
最新文章
- Oracle表结构修改触发视图无法正常使用问题
- java基础之 内部类
- [转]oracle pump expdp impdp使用
- VS中引用第三方库的方法(配置sqlite数据库)
- PHP动态函数
- codeforces 333A - Secrets
- HDU 5278 PowMod 数论公式推导
- wuzhicms常见函数方法的整理收集
- [Mugeda HTML5技术教程之11]Mugeda API简介
- android 实现自己定义状态栏通知(Status Notification)
- java类的结构(属性、方法、构造函数)
- catalan 数——卡特兰数(转)
- Java中double变量精确到小数点后几(2)位
- Web Service接口返回泛型的问题(System.InvalidCastException: 无法将类型为“System.Collections.Generic.List`1[System.String]”的对象强制转换为类型“System.String[]”)
- python学习随笔(三)
- gulp+browserSync自动刷新页面
- 自定义结构化config文件
- 服务器CPU繁忙或内存压力引起网络掉包的浅析与总结
- [转][C#]BarCodeToHTML
- 9.27 h5日记