如何做到 一个Action 类 应对多个action 请求

来源:互联网 发布:微信淘宝客返利机器人 编辑:程序博客网 时间:2024/06/07 19:58

问题如果一个Action类需要应对多个action请求,且每个action 请求的验证规则有不一样,该如何处理?

>为每一个不同的 action 请求定义其对应的验证文件: ActionClassName_AliasName_validation.xml

> 不带别名的配置文件: ActionClassName-validation.xml 中的验证规则依然会发生作用. 可以把每个 action 公共的验证规则配置在其中.但需要注意的是, 只适用于某一个 action 的请求的验证规则就不要这里再配置了


示例如下

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 我是分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

项目结构



person 类 和Action 类详见:如何进行声明式验证之字段验证? 中的 person 类 和Action

验证器:

爸爸:公用验证器 TestAgeValidation-validation.xml 这里面没有别名

<!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="age">         <field-validator type="int">             <param name="min">1</param>             <param name="max">130</param>             <message key="error.int"></message>         </field-validator>     </field>     <!--      像非空验证,就可以写在公共验证器中           <field name="age">        <field-validator type="required">               <message>age must not be null</message>        </field-validator>    </field>      --></validators>


儿子1:TestAgeValidation-testAge1-validation.xml  给儿子起个别名testAge1  好和老子区分开, 同时这个别名也对应的是一个名为 testAge1 的action 请求
<!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="age">         <field-validator type="int">             <param name="min">10</param>             <param name="max">50</param>             <message key="error.int"></message>         </field-validator>     </field>     </validators>
儿子2:TestAgeValidation-testAge2-validation.xml   
<!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="age">         <field-validator type="int">             <param name="min">51</param>             <param name="max">90</param>             <message key="error.int"></message>         </field-validator>     </field>     </validators>

国际化资源文件

基类: nihao.properties

username=UserNamepassword=Passwordsubmit=Submittime=Time:{0}error.int=Age needs to be between ${min} and ${max}age=Age
中文 :nihao_zh_CN.properties
username=\u7528\u6237\u540Dpassword=\u5BC6\u7801submit=\u63D0\u4EA4time=\u65F6\u95F4:{0}time2=\u65F6\u95F4:${birth}error.int=\u5E74\u9F84\u9700\u8981\u5728 ${min} \u548C ${max}\u4E4B\u95F4age=\u5E74\u9F84
英文:nihao_en_US.properties
username=UserNamepassword=Passwordsubmit=Submittime=Time:{0}time2=Time:${birth}error.int=Age needs to be between ${min} and ${max}age=Age

配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 配置全局的国际化资源文件 --><constant name="struts.custom.i18n.resources" value="nihao"></constant><package name="default" namespace="/" extends="struts-default"><!-- 这个就是起烂笔头的作用  --><interceptors><interceptor-stack name="baiduStack"><interceptor-ref name="paramsPrepareParamsStack"><param name="prepare.alwaysInvokePrepare">false</param></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="baiduStack"/><action name="testAge1" class="com.baidu.ActionValidation.TestAgeValidation"><result>/validation.jsp</result><result name="input">/validation.jsp</result></action><action name="testAge2" class="com.baidu.ActionValidation.TestAgeValidation"><result>/validation.jsp</result><result name="input">/validation2.jsp</result></action><!-- 中英文切换 是要使i18n 拦截器工作,因此是要使用一个action请求去调动其工作 --><!-- index.jsp 通过action 转到 validation.jsp --><action name="testVali" ><result>/validation.jsp</result></action><action name="testAge3" ><result>/validation.jsp</result></action></package></struts>

 页面 JSP

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><br><br><!-- 实验中英文切换 --><a href="testVali.action"> To validation </a><br><br><a href="validation2.jsp"> To validation2 </a></body></html>
validation.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><br><br><a href="testAge1.action?request_locale=zh_CN">中文</a> <a href="testAge1.action?request_locale=en_US">English</a><br><br><a href="index.jsp">主页</a><center><s:fielderror fieldName="age"></s:fielderror><br><br><s:form action="testAge1"  theme="simple" ><s:text name="age"></s:text> <s:textfield name="age" label="Age"></s:textfield><s:submit></s:submit></s:form></center></body></html>

validation2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><s:debug></s:debug><center>fieldErrors.age[0]:  ${fieldErrors.age[0] }<br><br>fieldErrors.age[1]: ${fieldErrors.age[1] }<br><br><br><br>s:fielderror:  <s:fielderror fieldName="age"></s:fielderror><br><br><s:form action="testAge2"  theme="simple" ><s:text name="age"></s:text> <s:textfield name="age" label="Age"></s:textfield><s:submit></s:submit></s:form></center></body></html>
success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>Age:<s:property value="age" /><h3>恭喜你有为青年!</h3></body></html>

效果:






通过实验 我们知道了 爸爸验证器 TestAgeValidation-validation.xml  和 儿子验证器 TestAgeValidation-testAge1-validation.xml

与 TestAgeValidation-testAge2-validation.xml ,分别有什么作用,及名命名规则:

爸爸的命名规则:ActionClassName_validation.xml

儿子的命名规则:ActionClassName_AliasName_validation.xml

现在孩子都是宝贝蛋 ,因此要放在父母中间,这样安全!大笑

0 0