今天我看了看struts的验证的问题。
哇,原来验证也这么强大。真不愧为struts。
我是接着我上次的那个Demo做的。
如果你愿意看的话,可以看这里 。
其实也没有什么地方可以改的。就是点点而已。
就是在form里面多加了几个textfield。
<s:form action="login" method="POST" namespace="/test1/test2">
<s:textfield label="姓名" name="name"/>
<s:textfield label="性别" name="sex"/>
<s:textfield label="年龄" name="uage"/>
<s:textfield label="邮件" name="uemail"/>
<s:reset value="重置"/>
<s:submit value="提交"/>
</s:form>
然后就是在action的java类里面把字段对应的变量加上。
方法有很多种。
1。在action里面验证。方法是重写public void validate() 方法。
2。在xml文件里面验证。
我们创建一个xml文件。
名字为:LoginAction-validation.xml 他的命名规则是:“action的类名”+“-validation.xml ”。位置是放在和action编译的class文件在同一个目录。
具体内容:
<?xml version="1.0" encoding="GBK" ?>
<!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">
<message>姓名要求不能为空</message>
</field-validator>
</field>
<field name="uage">
<field-validator type="int">
<param name="min">18</param>
<param name="max">30</param>
<message>年龄必须在${min}和${max}之间。</message>
</field-validator>
</field>
<field name="sex">
<field-validator type="requiredstring">
<message>性别要求不能为空</message>
</field-validator>
</field>
<field name="uemail">
<field-validator type="email">
<message>请输入正确的电子邮件</message>
</field-validator>
</field>
</validators>
我上次的action的class文件放在D:/chengxv/tomcat/webapps/basic/WEB-INF/classes/actions。所有这次我这个XML文件也要放在这里。对于上面的那个XML文件我不想多做解释。格式急速这样的。唯一想说的是field-validator—— type 问题,这个是告诉验证框架我们将要验证的类型。在最后我将把这个type贴出来。注意下type检查的类型要和action里面的变量的类型对应哦。比如说,在action里面的uage是int型,在XML文件里面就不能用double型来检验。
改动就这么多。我们运行下,我们什么都不填提交,看看效果。
咦?怎么邮件没有检查啊。O(∩_∩)O~。struts也是通人性的。他想,你娃娃懒嘛,邮件都不填,那我就当成你不想输入邮箱嘛。等有输入我才给你检查,没有输入我就跳过,你懒,我更懒。
原来struts对邮件是这样的哦!
这个是典型的服务器端验证 。大家都知道,这个有点影响服务器撒。
struts能不能进行客服端验证 喃。答案肯定是肯定的。我查了查,挺简单的。我就这样做的:
<s:form action="login" method="POST" namespace="/test1/test2" validate="true" >
跟上面比对下,就加了个红色的。然后就Ok了。很好很强大。
我有冒出一个问题。我能不能挨着挨着检查,一有错,我就返回错误,不检查下面的了。仔细看了看文档确实有。叫
Short-Circuiting短路验证
也很简单,举一个例,剩下的依葫芦画瓢。
原来的:
<field-validator type="requiredstring">
改过的:
<field-validator type="requiredstring" short-circuit="true">
具体要怎么短路,就看你了。
这个是结果:
看,他就验证到性别,下面的年龄就没有验证了,可以对比下上面的结果。
全部输入后结果:
ok,今天struts我就做了这么多。
下面我把那个type里面的类型全部贴出来。
这个是官方文档提供的。其实还有可以自定义验证类型。下回研究。
烧水,洗澡。