说起来有些小郁闷.<<程序天下-struts2技术详解>> 这本书主要是针对 Struts2.0 来讲的.但自己用的是 Struts2.1.6 所以在学的时候和书上有很多的出入.自己英语水平还不到能顺利看懂 英文文档的水平. 有些问题得不到解决.网上找了一下,也没有什么收获.郁闷!Struts2.1 在 Ajax 方面比 Struts2.0 改动了许多,暂时先不管了.
本来打算来一次地毯式的"扫荡" 不能如愿.
http://noknower.iteye.com/blog/274100
这里基础详细的讲了一些常用的.这就跟着补充一下吧.
在Action 里进行验证
// /** // * validate 进行全局验证 // */ // @Override // public void validate() { // if (null == userAge || userAge > 0) { // // 记录错误 addFieldError(属性名 , 提示信息); // addFieldError("userAge", "userAge 必须大于0."); // } // } // /** // * 针对 testAction 进行验证 validateXxxx 进行设置 // */ // public void validateTestAction() { // if (null == userAge || userAge > 0) { // // 记录错误 addFieldError(属性名 , 提示信息); // addFieldError("userAge", "userAge 必须大于0."); // } // }
要说的是在这里涉及到类型转换. 书上说 最好让类型转换人有优先于验证.想想些道理.这里关于类型转换就不多说了.
TestAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <!-- 字段校验 --> <field name="userName"> <field-validator type="stringlength"> <param name="minLength">4</param> <param name="maxLength">14</param> <message> xml userName 长度在${minLength} 和 ${maxLength} 之间. </message> </field-validator> <!-- short-circuit="true" 设置短路校验 --> <field-validator type="requiredstring" short-circuit="true"> <message>xml userName不能为空.</message> </field-validator> <!-- 正则校验 <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message key="name.regex"/> </field-validator> --> </field> </validators>
它的命名是经 Xxxx--validation.xml 形式来的.
sx:datetimepicker
这和Struts2.0 有不同 引入struts2-dojo-plugin-2.1.8.jar 之后
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <html> <head> <s:head theme="xhtml" /> <sx:head parseContent="true" extraLocales="en_us" /> </head> <body> 最好先进行类型转换再进行数据校验 <s:form action="testAction" method="post" > <sx:datetimepicker name="userDate" displayFormat="yyyy-MM-dd" language="en_us" label="userDate" value="userDate" /> <s:submit /> </s:form> </body> </html>
Ajax 验证 这块没有成功.在网上也没有找到好的解决方案 只能这样了. 附件里是 demo .
使用客户端校验是个很好的办法,但要注意:TestAction-validation.xml 资源中的消息在JSP不调用Action是不能使用的,只有先调用Action,该页面对应的校验配置文件.
在这里就是说要通过 Action(http://localhost:8088/TestStruts2Validate/testAction.action) 到达 index.jsp 页面时才可以在 s:form 中 使用 validate="true" 否则会出错.
Struts2.1 把Ajax 移动到 dojo 中.在使用过程中问题多多.但书本大多是以 Struts2.0 来讲的.