好久没写博客了,之前不写,是因为要找工作,终于找到了份工作,在银行,作开发。工作一年了,似乎离这里远了,学的东西,接触的东西多是些目的明确的,没太多值得写的。不过仔细想想还是学了很多,过来的一年,感觉自己提高了很多。看问题的方式很多都变了。
不多说了,继续保持我博客的风格,纯技术,没废话
Sruts2使用自带校验器应对单类多action方法及符合字段的情况
对于普通的一个action对应一个类,在类中定义execute执行action的情况很简单,相信大多数文章都会介绍到。本文主要针对一个类中对应多个action方法的情况,以及利用Struts2的类型转换已符合属性转为对象后进行校验的情况。
以例子说明,有一个类LoginAction有两个方法,login和regist分别对应于login.action和regist.action。则需要在LoginAction.java的目录下建立LoginAction-login-validation.xml和LoginAction-regist-validation.xml来分别对应两个action的校验。
下面是LoginAction-login-validation.xml的内容:
<?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="user">
<field-validator type="visitor">
<param name="context">login</param>
<message key="login.error.message" />
</field-validator>
</field>
</validators>
文件中<param name="context">login</param>中的login可以随意填,只要后面讲到的另一个xml文件的名字与其对应即可。
下面是LoginAction-regist-validation.xml的内容:
<?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="user">
<field-validator type="visitor">
<param name="context">regist</param>
<message key="login.error.message" />
</field-validator>
</field>
</validators>
要校验的页面中如果没有使用类型转换成符合属性的对象,就不必使用visitor的校验器,也就是说如果在登陆界面中提供了用户名和密码字段,而注册页面中提供了用户名,密码,年龄等其他字段,而在LoginAction中这些字段都作为属性存在,则不需要visitor校验器了,就在上面的两个xml配置文件中定义校验信息即可。
使用visitor类型的校验器对应的情况是在LoginAction使用了User对象,该对象具有用户名,密码,年龄等属性。这样就需要在User.java所在的目录下再建立两个文件,User-login-validation.xml和User-regist-validation.xml。这两个文件名中login和regist与之前的xml文件中<param name="context">后制定的一致。
User-login-validation.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!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="username">
<field-validator type="requiredstring">
<message key="login.error.username" />
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="login.error.password" />
</field-validator>
</field>
</validators>
User-regist-validation.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!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="username">
<field-validator type="requiredstring">
<message key="regist.error.username" />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">20</param>
<message key="rgist.username.maxlength">
</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="regist.error.password" />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">20</param>
<message key="rgist.password.maxlength">
</message>
</field-validator>
</field>
<field name="password2">
<field-validator type="requiredstring">
<message key="regist.error.password2" />
</field-validator>
</field>
<field name="email">
<field-validator type="requiredstring">
<message key="regist.error.email" />
</field-validator>
<field-validator type="regex">
<param name="expression">
<![CDATA[(^[/w]+(/.[/w]+)*@[/w]+(/.[/w]+)+$)]]>
</param>
<message key="regist.error.format.email" />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">50</param>
<message key="rgist.email.maxlength">
</message>
</field-validator>
</field>
<field name="phone">
<field-validator type="requiredstring">
<message key="regist.error.phone" />
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">20</param>
<message key="rgist.phone.maxlength">
</message>
</field-validator>
</field>
<field name="hobby">
<field-validator type="stringlength">
<param name="maxLength">50</param>
<message key="rgist.hobby.maxlength">
</message>
</field-validator>
</field>
</validators>