- 浏览: 517182 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
二、 基本输入校验
MVC 框架必须处理 2 方面问题 ,类型转换和输入校验。之前已经看过 Servlet 以硬编码的方式进行输入校验。
Struts 2 提供了基于验证框架的输入校验 ,所有的输入校验只需要通过指定简单的配置文件即可
1. 编写校验规则文件
regist.jsp
<body> <h3>请输入您的注册信息</h3> <s:fielderror/> <form method="post" action="regist.action"> 用户名:<input type="text" name="name"><br /> 密 码:<input type="text" name="pass"><br /> 年 龄:<input type="text" name="age"><br /> 生 日:<input type="text" name="birth"><br /> <input type="submit" value="注册"> </form> </body>
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import java.util.*; import java.util.regex.*; import java.text.*; public class RegistAction extends ActionSupport { //封装用户请求参数的四个属性 private String name; private String pass; private int age; private Date birth; //name属性的setter和getter方法 public void setName(String name) { this.name = name; } public String getName() { return this.name; } //pass属性的setter和getter方法 public void setPass(String pass) { this.pass = pass; } public String getPass() { return this.pass; } //age属性的setter和getter方法 public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } //birth属性的setter和getter方法 public void setBirth(Date birth) { this.birth = birth; } public Date getBirth() { return this.birth; } }
上面 action 继承了 ActionSupport,因此包含了一个 execute() 方法,该方法直接 return SUCCESS
采用 Struts 2 的校验框架时,只需为该 Action 指定一个 XML 校验文件。
规则:1) <Action 名字>-validation.xml ,
2) 该文件应该保存在与 Action class 文件相同的路径下。
RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入名字</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>您输入的用户名只能是字母和数字 ,且长度必须在4到25之间</message> </field-validator> </field> <!-- 校验Action的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入密码</message> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>您输入的密码只能是字母和数字 ,且长度必须在4到25之间</message> </field-validator> </field> <!-- 指定age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在1到150之间</message> </field-validator> </field> <!-- 指定birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>生日必须在${min}到${max}之间</message> </field-validator> </field> </validators>
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="globalMessages"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <action name="regist" class="lee.RegistAction"> <!-- 指定输入校验失败后返回regist.jsp页面 --> <result name="input">/regist.jsp</result> <result>/show.jsp</result> </action> <action name=""> <result>.</result> </action> </package> </struts>
提示: 如果 regist.jsp 中使用了 Struts 2 标签库来创建表单,就无需使用 <s:fielderror/> 标签,也可以输出校验失败的错误提示,因为 Struts 2 的表单标签默认就能输出校验失败的错误提示。
注意: 即使类型转换失败,系统并不是直接返回 input 逻辑视图,依然会调用 Struts 2 的输入校验机制进行输入校验。
2. 国际化提示信息
RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出name.requried对应的国际化信息 --> <message key="name.requried"/> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出name.regex对应的国际化信息 --> <message key="name.regex"/> </field-validator> </field> <!-- 校验Action的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出pass.requried对应的国际化信息 --> <message key="pass.requried"/> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出pass.regex对应的国际化信息 --> <message key="pass.regex"/> </field-validator> </field> <!-- 指定age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <!-- 如果校验失败,输出age.range对应的国际化信息 --> <message key="age.range"/> </field-validator> </field> <!-- 指定birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 如果校验失败,输出birth.range对应的国际化信息 --> <message key="birth.range"/> </field-validator> </field> </validators>
国际化资源文件中相应的 key :
globalMessages.properties (classpath 根目录下)
xwork.default.invalid.fieldvalue={0}字段无效 #违反用户名必须输入的提示信息 name.requried=您必须输入用户名! #违反用户名必须匹配正则表达式的提示信息 name.regex=您输入的用户名只能是字母和数字,且长度必须在4到25之间! #违反密码必须输入的提示信息 pass.requried=您必须输入密码! #违反密码必须匹配正则表达式的提示信息 pass.regex=您输入的密码只能是字母和数字,且长度必须在4到25之间! #违反年龄必须在指定范围的提示信息 age.range=您的年龄必须在${min}和${max}之间! #违反生日必须在指定范围的提示信息 birth.range=您的生日必须在${min}和${max}之间!
3.使用客户端校验
增加客户端校验,只需将输入页面的表单元素改为使用 Struts 2 标签来生成表单 ,并且为该表单增加 validate="true" 属性 即可。
regist.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>请输入您的注册信息</title> <meta name="website" content="http://www.crazyit.org" /> <s:head/> </head> <body> <h3>请输入您的注册信息</h3> <!-- 使用Struts 2标签库生成表单 --> <s:form action="regist" validate="true"> <!-- 使用s:textfield标签生成文本输入框 --> <s:textfield label="用户名" name="name"/> <s:password label="密码" name="pass"/> <s:textfield label="年龄" name="age"/> <s:textfield label="生日" name="birth"/> <s:submit/> </s:form> </body> </html>
上面 <s:head/> 标签,会导入一些 css 式样单等,标签会使用红色字体显示校验失败错误提示
注意: 以上的 jsp 配合 2 中的 RegistAction-validation.xml 会发成异常!
因为当要使用客户端校验时, 如果 RegistAction-validation.xml 中的 <message /> 元素指定了 key 属性,系统将无法从全局国际化资源文件中加载 key 对应的国际化信息。
解决方法: struts 2 提供了另一种输出国际化资源文件方法:${getText("消息 key")}
如下: RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出name.requried对应的国际化信息 --> <message>${getText("name.requried")}</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出name.regex对应的国际化信息 --> <message>${getText("name.regex")}</message> </field-validator> </field> <!-- 校验Action的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出pass.requried对应的国际化信息 --> <message>${getText("pass.requried")}</message> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出pass.regex对应的国际化信息 --> <message>${getText("pass.regex")}</message> </field-validator> </field> <!-- 指定age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <!-- 如果校验失败,输出age.range对应的国际化信息 --> <message>${getText("age.range")}</message> </field-validator> </field> <!-- 指定birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 如果校验失败,输出birth.range对应的国际化信息 --> <message>${getText("birth.range")}</message> </field-validator> </field> </validators>
上面的校验规则文件中,没有直接校验失败的提示信息,而是通过调用 ActionSupport 的 getText() 方法来取得国际化提示信息
注意: 客户端校验是基于 javascript 完成,所以不是所以服务器端校验都能转换成客户端校验的。
客户端校验仅仅支持如下几种 校验器:
1): required validator (必填校验器)
2): requiredstring validator (必填字符串校验器)
3): stringlength validator (字符串长度校验器)
4): regex validator (正则表达式校验器)
5): email validator (邮件校验器)
6): url validator (网址校验器)
7): int validator (整数校验器)
8): double validator (双精度数校验器)
客户端校验有 2 个值得注意的地方:
1): <s:form/> 中有一个 theme 属性,不要设置为 simple
2): 不要在校验规则文件错误提示信息中,直接使用 key 来制定国际化提示信息
三、 校验器的配置风格
Struts 2 提供了 2 种 方式配置校验规则:字段校验器风格 和非字段校验器风格 。
2者没什么本质不同,一种是字段优先,另一种是校验器优先
1.字段校验器配置风格
前面应用中校验规则都是采用字段校验器风格配置的 。如:
<!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出name.requried对应的国际化信息 --> <message>${getText("name.requried")}</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出name.regex对应的国际化信息 --> <message>${getText("name.regex")}</message> </field-validator> </field>
每个<field> 元素指定一个 Action 属性必须遵守的规则,该元素 name 属性指定被校验的字段;如果需要满足多个规则,则在<field> 下增加多个 <field-validator> 元素。
每个 <field-validator> 元素指定一个校验规则,该元素的 type 属性指定了校验器名称,该元素可以包含多个 <param> 子元素,用于指定该校验器的参数;另外,每个 <field-validator> 元素都必须有一个 <message> 元素,该元素确定校验失败后的提示信息。
2.非字段校验器配置风格
非字段校验器配置风格,是一种以校验器优先的配置方式。这种配置下,校验规则文件的根元素下包含了多个 <validator> 元素,每个 <validator> 元素定义了一个校验规则。
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts2数据校验的规则文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- Struts2校验文件的根元素 --> <validators> <!-- 配置指定必填字符串的校验器 --> <validator type="requiredstring"> <!-- 使用该校验器校验name属性 --> <param name="fieldName">name</param> <param name="trim">true</param> <!-- 指定校验失败后输出name.required对应的国际化信息 --> <message>${getText("name.requried")}</message> </validator> <!-- 配置指定正则表达式的校验器 --> <validator type="regex"> <!-- 使用该校验器校验name属性 --> <param name="fieldName">name</param> <param name="trim">true</param> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 指定校验失败后输出name.required对应的国际化信息 --> <message>${getText("name.regex")}</message> </validator> <!-- 配置指定必填字符串的校验器 --> <validator type="requiredstring"> <!-- 使用该校验器校验pass属性 --> <param name="fieldName">pass</param> <param name="trim">true</param> <!-- 指定校验失败后输出pass.required对应的国际化信息 --> <message>${getText("pass.requried")}</message> </validator> <!-- 配置指定正则表达式的校验器 --> <validator type="regex"> <!-- 使用该校验器校验pass属性 --> <param name="fieldName">pass</param> <param name="trim">true</param> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 指定校验失败后输出pass.required对应的国际化信息 --> <message>${getText("pass.regex")}</message> </validator> <!-- 配置指定整数校验器 --> <validator type="int"> <!-- 使用该校验器校验age属性 --> <param name="fieldName">age</param> <!-- 指定整数校验器的范围--> <param name="min">1</param> <param name="max">150</param> <!-- 指定校验失败后输出age.range对应的国际化信息 --> <message>${getText("age.range")}</message> </validator> <!-- 配置指定日期校验器 --> <validator type="date"> <!-- 使用该校验器校验birth属性 --> <param name="fieldName">birth</param> <!-- 指定日期校验器的范围--> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 指定校验失败后输出birth.range对应的国际化信息 --> <message>${getText("birth.range")}</message> </validator> </validators>
相比之下,在一个 <field> 元素内定义字段校验器,比使用带有一个 fieldName 参数的 <validator> 元素好得多,而且 XML 代码本身也清晰多。
3.短路校验器
校验规则文件的 <validator> 元素和 <field-validator> 元素可以指定一个可选的 short-circuit 属性,这个属性是指定该校验器是否是短路校验器,默认 false
通常,如果浏览者完全没有在某个输入框输入任何内容,系统应该仅输出第一行提示信息,而不是一次输出全部校验信息提示。为了达到这个效果,应该使用短路校验器。
RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则,将其配置成短路校验器 --> <field-validator type="requiredstring" short-circuit="true"> <param name="trim">true</param> <!-- 如果校验失败,输出name.requried对应的国际化信息 --> <message key="name.requried"/> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出name.regex对应的国际化信息 --> <message key="name.regex"/> </field-validator> </field> <!-- 校验Action的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则,将其配置成短路校验器 --> <field-validator type="requiredstring" short-circuit="true"> <param name="trim">true</param> <!-- 如果校验失败,输出pass.requried对应的国际化信息 --> <message key="pass.requried"/> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出pass.regex对应的国际化信息 --> <message key="pass.regex"/> </field-validator> </field> <!-- 指定age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <!-- 如果校验失败,输出age.range对应的国际化信息 --> <message key="age.range"/> </field-validator> </field> <!-- 指定birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 如果校验失败,输出birth.range对应的国际化信息 --> <message key="birth.range"/> </field-validator> </field> </validators>
注意 :struts 2 目前还不支持 客户端短路校验
4.校验顺序和短路
校验器的执行顺序有如下规则:
1. 所有非字段风格的校验器优先于字段风格的校验器
2. 所有非字段风格的校验器中,排在前面的会先执行
3. 所有字段风格的校验器中,排在前面的会先执行
校验器短路的原则是:
1. 所有非字段校验器是最优先执行,如果某个非字段校验器校验失败了,
则该字段上所有字段校验器都不会获得校验机会
2. 非字段校验器的校验失败,不会阻止其他非字段校验的执行
3. 如果一个字段校验器校验失败后,则该字段下的且排在该校验失败的
校验器之后的其他字段校验器不会获得校验的机会
3. 字段校验器永远都不会阻止非字段校验器的执行。
如果应用中所需的校验规则非常复杂,用户可以有2个选择:
1. 开放自己的校验器,
2. 重写 Action 的 validate() 方法。
四、 校验文件的搜索规则
Struts 2 的一个 Action 中可能包含多个处理逻辑,当一个 Action 包含多个类似与 execute() 方法时,每个方法都是一个处理逻辑。不同的处理逻辑可能需要不同的校验规则,Struts 2 也提供了对不同 Action 指定不同的校验规则支持。
当需要让一个 Action 可以处理多个请求时,应该在配置 <action> 元素时指定 method 属性 ,通过这种方式,就可以将一个 Action 处理类配置成多个逻辑 Action。
下面是 2 个逻辑的 Action:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="globalMessages"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <action name="regist" class="lee.RegistAction"> <result name="input">/regist.jsp</result> <result>/show.jsp</result> </action> <action name="login" class="lee.RegistAction" method="login"> <result name="input">/login.jsp</result> <result>/show.jsp</result> </action> <action name=""> <result>.</result> </action> </package> </struts>
假设上面 2 个Action 的校验规则不同。如果按照之前的校验规则文件,就分不清到底要校验哪个处理逻辑。为了能精确控制每个校验逻辑,Struts 2 允许通过为校验规则文件名增加 Action 别名来指定具体需要校验的处理逻辑。 如下:
<ActionClassName>-<ActionAliasName>-validation.xml
ActionClassName 是 Action 处理类名 ,ActionAliasName 是 Action 所包含处理方法在 struts-xml 文件中对应的 name 属性 。
例如: 我们需要为 login 处理单独指定校验规则,则名为: RegistAction-login-validation.xml (该文件与 RegistAction 的 class 文件 放在同一路径下):
RegistAction-login-validation.xml
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验规则文件的根元素 --> <validators> <!-- 校验name属性 --> <field name="name"> <!-- 使用表达式校验器校验name属性 --> <field-validator type="fieldexpression"> <!-- 指定name属性和pass属性必须相等 --> <param name="expression"><![CDATA[(user == pass)]]></param> <message>${getText("nameexp")}</message> </field-validator> </field> </validators>
上面校验规则文件仅仅指定了 Action 的 name 属性必须和 pass 属性相同,但是系统中原有的校验规则依然会起作用:
RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <validators> <field name="pass"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>${getText("pass.requried")}</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>${getText("pass.regex")}</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>${getText("age.range")}</message> </field-validator> </field> <field name="birth"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>${getText("birth.range")}</message> </field-validator> </field> </validators>
因此: 名为 login 的 Action 中包含的校验规则是 RegistAction-validation.xml 和 RegistAction-login-validation.xml 两个文件规则的总和。
除此之外: 系统如果包含 2 个Action ,BaseAction 和 RegistAction,RegistAction 继承了 BaseAction,且 2 个 Action 都指定了对应的配置文件,则 RegistAction 对应 Action 的校验规则是 RegistAction-validation.xml 和 BaseAction-validation.xml 两个文件的总和。
假设系统有两个 Action: BaseAction 和 RegistAction,则系统搜索规则文件顺序如下:
1. BaseAction-validation.xml
2. BaseAction-别名-validation.xml
3. RegistAction-validation.xml
4. RegistAction -别名 -validation.xml
即使找到第一个校验规则文件,系统还会继续搜索,不管什么情况,系统总是按固定顺序搜索
注意: Struts 2 搜索规则文件是从上而下的,如果 2 个校验文件中指定的规则冲突,则后面的覆盖前面的
BaseAction.java
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import java.util.*; import java.util.regex.*; import java.text.*; public class BaseAction extends ActionSupport { private String name; public void setName(String name) { this.name = name; } public String getName() { return (this.name); } }
RegistAction.java
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import java.util.*; import java.util.regex.*; import java.text.*; public class RegistAction extends BaseAction { private String pass; private int age; private Date birth; public void setPass(String pass) { this.pass = pass; } public void setAge(int age) { this.age = age; } public void setBirth(Date birth) { this.birth = birth; } public String getPass() { return (this.pass); } public int getAge() { return (this.age); } public Date getBirth() { return (this.birth); } public String login() { return SUCCESS; } }
BaseAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>${getText("name.requried")}</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>${getText("name.regex")}</message> </field-validator> </field> </validators>
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7381) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17375.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24265.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2391四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2482一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2905六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1624四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2016一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11366.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1639六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1967四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2026三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1358一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2254二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1302一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1790三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1977二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2076一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1210六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1715五、 内建校验器 S ...
相关推荐
### Struts2输入校验深度解析 #### 一、手动输入完成校验 在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中...
本文将深入探讨Struts2中的输入校验机制,以及如何对指定方法进行输入校验。 在Struts2中,输入校验通常分为两种方式:客户端校验和服务器端校验。客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但...
本文将深入探讨Struts2中的输入校验机制,帮助开发者更好地理解和应用。 一、Struts2输入校验概述 在Struts2中,输入校验主要用于验证用户通过表单提交的数据,防止无效或恶意数据进入系统。Struts2提供了多种方式...
在Struts2中,输入校验是确保数据安全、准确和有效的重要环节。本篇文章将深入探讨Struts2的输入校验机制及其相关知识点。 **输入校验的重要性** 输入校验是Web应用开发中的关键步骤,它可以防止恶意用户提交无效或...
struts2的输入校验有两种方式: 一.重写validate()方式 二.采用配置文件的方式 先我们就以一个简单的登录的例子来讲解这个吧. 重点讲解下,第二个采用配置文件的方式: 1.添加一个xml的校验文件,保存在...
Struts 2 输入校验
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
本篇文章将深入探讨Struts2中的输入校验机制。 一、Struts2 输入校验概述 Struts2提供了多种进行输入校验的方式,包括Action级别校验、Validator框架校验、拦截器校验以及使用JSR303/JSR349 Bean Validation标准。...
Struts2是一个流行的Java web开发框架,它提供了一套强大的输入校验机制,确保用户提交的数据符合业务逻辑的要求。在本文中,我们将深入探讨Struts2的输入校验功能,包括手动输入校验和基于验证框架的输入校验。 ##...
Struts2作为一款流行的Java Web框架,其在处理用户输入数据和实现多语言支持方面具有强大的功能。在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及...
在Struts2中,输入校验是一个至关重要的部分,它确保了用户从客户端提交的数据符合预设的业务规则,从而避免了无效或不合法数据进入系统。本篇文章将详细介绍如何在Struts2中进行输入校验,包括两种主要实现方式:...
在Struts2中,输入校验是确保用户提交的数据符合预设规范的重要环节,可以防止非法数据进入系统,保护数据的完整性和安全性。本文将详细探讨Struts2中的输入校验机制。 首先,Struts2提供了两种主要的校验方式:...
要求使用Struts2的内建校验器校验“书名”、“作者”、“出版日期”、“价格”和“库存数量”字段;要求手动编写代码校验“书号”的有效性;要求手动编写代码校验“出版社”字段中是否包含了“出版社”三个字。
在Struts2中,输入校验是确保数据安全性和应用稳定性的重要环节。它帮助开发者防止非法或无效的数据进入系统,从而减少潜在的错误和安全漏洞。 **Struts2输入校验机制** 1. **内置验证框架**: Struts2提供了内置的...
一、Struts输入校验概述 输入校验在Web应用中扮演着数据过滤和保护的角色,它可以避免脏数据进入数据库,提高系统的稳定性和安全性。Struts框架提供了多种方式进行输入校验,包括ActionForm校验、Validator框架以及...