首页 > 代码库 > Struts2:效验器——声明式
Struts2:效验器——声明式
就是用xml配置的方式,而不是Java代码的形式,那个是“编程式”
Action:
package org.ah.s2;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;public class C1 extends ActionSupport implements ModelDriven<Model> { public String m1() { return "success"; } @Override public Model getModel() { return new Model(); }}
Model:
package org.ah.s2;import java.util.Date;public class Model { private String uname; private String pwd; private String pwd2; private Date birth; private int weight; public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public String getPwd2() { return pwd2; } public void setPwd2(String pwd2) { this.pwd2 = pwd2; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; }}
struts.xml
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <constant name="struts.configuration.xml.reload" value="true" /> <package name="p1" namespace="/" extends="struts-default"> <action name="*Action" class="org.ah.s2.C1" method="{1}"> <result name="success" type="dispatcher"> /inputMsg.jsp </result> <result name="input">/index.jsp</result> </action> </package></struts>
表示层:
index.jsp核心代码
<s:form action="m1Action" method="post"> <s:textfield name="uname" label="用户名"/> <s:textfield name="pwd" label="密码"/> <s:textfield name="pwd2" label="确认密码"/> <s:textfield name="birth" label="生日"/> <s:textfield name="weight" label="体重"/> <s:submit value="提交"></s:submit> </s:form>
input.jsp 无关大局,略
自定义效验器:
package org.ah.s2;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.validator.ValidationException;import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;public class MyValidator extends FieldValidatorSupport { private String model; public String getModel() { return model; } public void setModel(String model) { this.model = model; } @Override public void validate(Object obj_i) throws ValidationException { // 字段名 String fieldName = getFieldName(); // 字段值 Object fieldValue =http://www.mamicode.com/ getFieldValue(fieldName, obj_i); if (fieldValue instanceof String) { String strV = (String) fieldValue; /* * 中文unicode none:无中文 all :全中文 */ if ("none".equals(model)) { // compile:编译 Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); Matcher m = p.matcher(strV); if (m.find()) {// 找到中文 // 效验失败(显示不出来,随便写写,不写不报错) addFieldError(fieldName, obj_i); } } else if ("all".equals(model)) { if (!Pattern.matches("[\u4e00-\u9fa5]+", strV)) { // 不是全中文 addFieldError(fieldName, obj_i);// 效验失败 } } } }}
配合自定义效验器,放在src下:validators.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator Definition 1.0//EN" "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"><validators> <validator name="cn" class="org.ah.s2.MyValidator" /></validators>
配置效验器,其中使用了系统预定义效验器&自定义效验器
C1-validation.xml,和C1.java放在一起
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators> <field name="uname"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入名字</message> </field-validator> <field-validator type="cn"> <param name="model">all</param> <message>需要中文</message> </field-validator> </field> <field name="pwd"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入密码</message> </field-validator> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{4,25})]]></param> <message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message> </field-validator> </field> <field name="pwd2"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[pwd eq pwd2]]></param> <message>两次输入密码不一致</message> </field-validator> </field> <field name="birth"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>年纪必须在${min}到${max}之间</message> </field-validator> </field> <field name="weight"> <field-validator type="conversion"> <message>体重请输入数字类型</message> </field-validator> <field-validator type="int"> <param name="min">1</param> <param name="max">300</param> <message>体重必须在${min}到${max}之间</message> </field-validator> </field></validators>
运行结果:
Struts2:效验器——声明式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。