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

问题如果一个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=UserName
password=Password
submit=Submit
time=Time:{0}
error.int=Age needs to be between ${min} and ${max}
age=Age
中文 :nihao_zh_CN.properties
username=\u7528\u6237\u540D
password=\u5BC6\u7801
submit=\u63D0\u4EA4
time=\u65F6\u95F4:{0}
time2=\u65F6\u95F4:${birth}
error.int=\u5E74\u9F84\u9700\u8981\u5728 ${min} \u548C ${max}\u4E4B\u95F4
age=\u5E74\u9F84
英文:nihao_en_US.properties
username=UserName
password=Password
submit=Submit
time=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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值