struts2可以像struts1一样,在Action中使用validator()方法进行验证,也可以使用校验规则文件进行验证.
本文主要介绍的是使用校验规则文件方式进行的验证.
1.件命名方式:ActionClassName-ActionAliasName-validation.xml
其中,ActionClassName表示的是这个Action的名称.ActionAliasName表示的是多处理逻辑中的别名.在struts2中一个Action文件可以实现多个处理逻辑.也就是在struts.xml的配置文件中配置Action标签,其它的Class可以共用一个Action类.所以这个ActionAliasName表示的就是这个Struts标签的Name属性值.
问题来了,struts.xml中的标签是可以使用通配符的,使用通配符怎么办?
如:
<action name="add_*" method="add{1}" class="struts.{1}Action">
<param name="path">WEB-INF/classes/user.xml</param>
<result name="success" type="redirect-action">
User_List
</result>
<result name="input">/user/addUser.jsp</result>
</action>
在这种情况下就要看提交文件addUser.jsp中add_后面的是什么,我的应用中是 add_User.
ok,解决了,你的校验规则文件名就是 UserAction-add_User-validation.xml.
还要记住这个文件要与UserAction.class放在一个包下面才行哦.
2.使用validator="true"的方式生成javascript的客户端验证.
<s:form action="add_User.action" validate="true">
<s:textfield name="user.loginName" label="登陆名"/>
<s:textfield name="user.password" label="密码"/>
<s:textfield name="user.name" label="姓名"/>
<s:textfield name="user.tag" label="标志"/>
<s:submit value="提交"/><s:reset value="重置"/>
</s:form>
按理说,这样的样子应该是可以自动生成客户端验证的.但是我的怎么也成不了..
注意, action="add_User.action" 这一名,我发现官方是没有后面的.action的.
问题就是这样.如果你不生成客户端的验证.加上.action的后辍是可以提交到服务器的.
但是却无法生成客户端的验证.所以这点需要注意,最好养成习惯,如果使用了s:form的标签,
acton的属性值就不要接.action.免得以后还会不错误出现.
3.action属性中使用模型.
我在Action中有一个属性-User,这个User是一个类.类中有loginName,name,password,tag四个属性.
在表单中,如上所示,name属性都是以user.为前辍.这样Action中就能够正常接收了.
但是验证时怎么办呢?
以下的验证文件:
<validators>
<field name="user.loginName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>登陆名称不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
</field>
<field name="user.tag">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>标示不能为空</message>
</field-validator>
</field>
</validators>
对,在<filed>标签中name属性值也需要加上一个user.前辍.
本文主要介绍的是使用校验规则文件方式进行的验证.
1.件命名方式:ActionClassName-ActionAliasName-validation.xml
其中,ActionClassName表示的是这个Action的名称.ActionAliasName表示的是多处理逻辑中的别名.在struts2中一个Action文件可以实现多个处理逻辑.也就是在struts.xml的配置文件中配置Action标签,其它的Class可以共用一个Action类.所以这个ActionAliasName表示的就是这个Struts标签的Name属性值.
问题来了,struts.xml中的标签是可以使用通配符的,使用通配符怎么办?
如:
<action name="add_*" method="add{1}" class="struts.{1}Action">
<param name="path">WEB-INF/classes/user.xml</param>
<result name="success" type="redirect-action">
User_List
</result>
<result name="input">/user/addUser.jsp</result>
</action>
在这种情况下就要看提交文件addUser.jsp中add_后面的是什么,我的应用中是 add_User.
ok,解决了,你的校验规则文件名就是 UserAction-add_User-validation.xml.
还要记住这个文件要与UserAction.class放在一个包下面才行哦.
2.使用validator="true"的方式生成javascript的客户端验证.
<s:form action="add_User.action" validate="true">
<s:textfield name="user.loginName" label="登陆名"/>
<s:textfield name="user.password" label="密码"/>
<s:textfield name="user.name" label="姓名"/>
<s:textfield name="user.tag" label="标志"/>
<s:submit value="提交"/><s:reset value="重置"/>
</s:form>
按理说,这样的样子应该是可以自动生成客户端验证的.但是我的怎么也成不了..
注意, action="add_User.action" 这一名,我发现官方是没有后面的.action的.
问题就是这样.如果你不生成客户端的验证.加上.action的后辍是可以提交到服务器的.
但是却无法生成客户端的验证.所以这点需要注意,最好养成习惯,如果使用了s:form的标签,
acton的属性值就不要接.action.免得以后还会不错误出现.
3.action属性中使用模型.
我在Action中有一个属性-User,这个User是一个类.类中有loginName,name,password,tag四个属性.
在表单中,如上所示,name属性都是以user.为前辍.这样Action中就能够正常接收了.
但是验证时怎么办呢?
以下的验证文件:
<validators>
<field name="user.loginName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>登陆名称不能为空</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<field name="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>姓名不能为空</message>
</field-validator>
</field>
<field name="user.tag">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>标示不能为空</message>
</field-validator>
</field>
</validators>
对,在<filed>标签中name属性值也需要加上一个user.前辍.