您的位置:首页 > 其它

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

2016-05-12 16:24 633 查看
问题:如果一个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

现在孩子都是宝贝蛋 ,因此要放在父母中间,这样安全!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: