Struts2客户端验证的学习
2012-03-28 20:02
218 查看
转自http://blog.csdn.net/fj359941160/article/details/7037932
直接上代码。 验证问题。
遇到了点问题。
regist.jsp中的表单代码
[html]
view plaincopyprint?
<s:form
action="registAction"
validate="true">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"/>
</s:form>
验证代码
[html]
view plaincopyprint?
<?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"
short-circuit="true">
<param
name="trim">true</param>
<message
key="name.requried"></message>
</field-validator>
<field-validator
type="regex">
<param
name="expression"><![CDATA[(\w{4,25})]]></param>
<message
key="name.regex"></message>
</field-validator>
</field>
<field
name="pass">
<field-validator
type="requiredstring"
short-circuit="true">
<param
name="trim">true</param>
<message
key="pass.requried"></message>
</field-validator>
<field-validator
type="regex">
<param
name="expression"><![CDATA[(\w{4,25})]]></param>
<message
key="pass.regex"></message>
</field-validator>
</field>
<field
name="age">
<field-validator
type="int"
short-circuit="true">
<param
name="min">1</param>
<param
name="max">150</param>
<message
key="age.range"></message>
</field-validator>
</field>
<field
name="birth">
<field-validator
type="date"
short-circuit="true">
<param
name="min">1900-01-01</param>
<param
name="max">2050-02-21</param>
<message
key="birth.range"></message>
</field-validator>
</field>
</validators>
所以第一个不符合条件后后面就不执行了。
服务器端验证不同。它还是会把所有的属性都验证一遍。
这里说下遇到的问题。
首先第一个在regist.jsp文件中
[html]
view plaincopyprint?
<s:form
action="registAction.action"
validate="true">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"/>
</s:form>
我们在namespace为/test的package里配置了这些东西。
下面这个东西是为了通过Struts的核心Filter。而不直接regist.jsp。 不然会出错
[html]
view plaincopyprint?
<action
name="*">
<result>/{1}.jsp</result>
</action>
这里必须要写明validate为true(客户端验证)和 namespace 。 namespace必须要和struts2中的一样。
如果我们写了这样的代码
[html]
view plaincopyprint?
<s:form
action="/test/registAction.action"
validate="true"
method="post">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"
/>
</s:form>
<s:form action="/test/registAction.action" validate="true" method="post">
<s:textfield name="name" label="用户名"></s:textfield>
<s:textfield name="pass" label="密 码"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birth" label="生日"></s:textfield>
<s:submit name="注册" />
</s:form>
这样就变成了服务器端验证。
在这搞了半天。
后来上网查了资料。在Struts2的官方客户端验证例子中有这个一段话http://struts.apache.org/2.1.8.1/docs/client-validation.html
下面这段话正是我刚才错误的配置。 看While the following will "work" in the sense that the form will function correctly,
client-side validation will not. That is
because Struts must know the exact namespace and action (rather than a URL) to properly support validation.
英语很差。。 稍微翻译一下:
大概的意思是: 客户端验证不能执行。这是因为Struts2必须知道额外的namespace(而不是一个URL)去支持验证功能
所以必须要写namepsace而不要在action里写一个包含namespace的URL。。。。
直接上代码。 验证问题。
遇到了点问题。
regist.jsp中的表单代码
[html]
view plaincopyprint?
<s:form
action="registAction"
validate="true">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"/>
</s:form>
[html] view plaincopyprint? <action name="registAction" class="fj.struts.action.RegistAction"> <result name="input">/regist.jsp</result> <result name="success">/show.jsp</result> </action> <action name="registAction" class="fj.struts.action.RegistAction"> <result name="input">/regist.jsp</result> <result name="success">/show.jsp</result> </action>
验证代码
[html]
view plaincopyprint?
<?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"
short-circuit="true">
<param
name="trim">true</param>
<message
key="name.requried"></message>
</field-validator>
<field-validator
type="regex">
<param
name="expression"><![CDATA[(\w{4,25})]]></param>
<message
key="name.regex"></message>
</field-validator>
</field>
<field
name="pass">
<field-validator
type="requiredstring"
short-circuit="true">
<param
name="trim">true</param>
<message
key="pass.requried"></message>
</field-validator>
<field-validator
type="regex">
<param
name="expression"><![CDATA[(\w{4,25})]]></param>
<message
key="pass.regex"></message>
</field-validator>
</field>
<field
name="age">
<field-validator
type="int"
short-circuit="true">
<param
name="min">1</param>
<param
name="max">150</param>
<message
key="age.range"></message>
</field-validator>
</field>
<field
name="birth">
<field-validator
type="date"
short-circuit="true">
<param
name="min">1900-01-01</param>
<param
name="max">2050-02-21</param>
<message
key="birth.range"></message>
</field-validator>
</field>
</validators>
[html] view plaincopyprint? short-circuit="true" short-circuit="true"
所以第一个不符合条件后后面就不执行了。
服务器端验证不同。它还是会把所有的属性都验证一遍。
这里说下遇到的问题。
首先第一个在regist.jsp文件中
[html]
view plaincopyprint?
<s:form
action="registAction.action"
validate="true">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"/>
</s:form>
[html] view plaincopyprint? <package name="regist" extends="struts-default" namespace="/test"> <action name="registAction" class="fj.struts.action.RegistAction"> <result name="input">/regist.jsp</result> <result name="success">/show.jsp</result> </action> <action name="*"> <result>/{1}.jsp</result> </action> </package> <package name="regist" extends="struts-default" namespace="/test"> <action name="registAction" class="fj.struts.action.RegistAction"> <result name="input">/regist.jsp</result> <result name="success">/show.jsp</result> </action> <action name="*"> <result>/{1}.jsp</result> </action> </package>
我们在namespace为/test的package里配置了这些东西。
下面这个东西是为了通过Struts的核心Filter。而不直接regist.jsp。 不然会出错
[html]
view plaincopyprint?
<action
name="*">
<result>/{1}.jsp</result>
</action>
[html] view plaincopyprint? <s:form action="registAction" validate="true" namespace="/test" method="post"> <s:textfield name="name" label="用户名"></s:textfield> <s:textfield name="pass" label="密 码"></s:textfield> <s:textfield name="age" label="年龄"></s:textfield> <s:textfield name="birth" label="生日"></s:textfield> <s:submit name="注册" /> </s:form> <s:form action="registAction" validate="true" namespace="/test" method="post"> <s:textfield name="name" label="用户名"></s:textfield> <s:textfield name="pass" label="密 码"></s:textfield> <s:textfield name="age" label="年龄"></s:textfield> <s:textfield name="birth" label="生日"></s:textfield> <s:submit name="注册" /> </s:form>
这里必须要写明validate为true(客户端验证)和 namespace 。 namespace必须要和struts2中的一样。
如果我们写了这样的代码
[html]
view plaincopyprint?
<s:form
action="/test/registAction.action"
validate="true"
method="post">
<s:textfield
name="name"
label="用户名"></s:textfield>
<s:textfield
name="pass"
label="密 码"></s:textfield>
<s:textfield
name="age"
label="年龄"></s:textfield>
<s:textfield
name="birth"
label="生日"></s:textfield>
<s:submit
name="注册"
/>
</s:form>
<s:form action="/test/registAction.action" validate="true" method="post">
<s:textfield name="name" label="用户名"></s:textfield>
<s:textfield name="pass" label="密 码"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birth" label="生日"></s:textfield>
<s:submit name="注册" />
</s:form>
这样就变成了服务器端验证。
在这搞了半天。
后来上网查了资料。在Struts2的官方客户端验证例子中有这个一段话http://struts.apache.org/2.1.8.1/docs/client-validation.html
下面这段话正是我刚才错误的配置。 看While the following will "work" in the sense that the form will function correctly,
client-side validation will not. That is
because Struts must know the exact namespace and action (rather than a URL) to properly support validation.
英语很差。。 稍微翻译一下:
大概的意思是: 客户端验证不能执行。这是因为Struts2必须知道额外的namespace(而不是一个URL)去支持验证功能
所以必须要写namepsace而不要在action里写一个包含namespace的URL。。。。
相关文章推荐
- Struts2客户端验证的学习
- 【ssh2学习记录】4、struts2验证框架内置校验器列表
- Struts2学习笔记2 ――表单验证
- Struts2学习篇(四) 使用validate方法验证数据
- RTSP客户端学习(一)——live555库的移植和验证
- Jimoshi_Struts2 框架学习(三)--valueStack和ognl、struts2验证、struts2文件上传和下载
- struts2 客户端验证+服务端验证 简单例子
- Struts2 学习之三 (struts数据验证)
- struts2在学习(十)--表单验证的两种方式
- struts2学习(14)——输入验证(1)
- TMG学习(三),防火墙客户端身份验证
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
- Struts2学习篇(五) 使用Validation框架验证数据
- Struts2学习(五)—表单验证 XML
- java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器
- 学习笔记: Struts2中使用validate框架对Action的不同方法进行验证
- struts2的表单验证 ,消息处理学习笔记
- struts2第十四讲学习笔记,手动验证与框架验证
- java struts2入门学习实例--使用struts进行验证
- Jquery_Ajax 注册验证(Struts2)<学习随笔>