转自http://blog.csdn.net/fj359941160/article/details/7037932
直接上代码。 验证问题。
遇到了点问题。
regist.jsp中的表单代码
- <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>
4个属性分别是user对象里的四个属性
注意 <s:form>标签里有个属性validate为true。这样才是客户端验证。
struts2中的配置package中的action配置
- <action name="registAction" class="fj.struts.action.RegistAction">
- <result name="input">/regist.jsp</result>
- <result name="success">/show.jsp</result>
- </action>
验证代码
- <?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>
看结果
由于我们在validate文件中加入了短路属性
- short-circuit="true"
所以第一个不符合条件后后面就不执行了。
服务器端验证不同。它还是会把所有的属性都验证一遍。
这里说下遇到的问题。
首先第一个在regist.jsp文件中
- <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>
一开始我的action是registAction.action多了个后缀action。 结果就变成了服务器端验证。每个属性都验证了一遍。
第二点。
在struts.xml文件中配置如下内容
<action name="*">
<result>/{1}.jsp</result>
</action>
不然会出现错误
错误的原因是 我们希望Struts2的客户端验证能发生作用,那我们进入该regist.jsp页面之前必须经过Struts2的核心Filter,而上面我们直接请求了regist.jsp,所以出错了。
后来又做了个例子。
- <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>
下面这个东西是为了通过Struts的核心Filter。而不直接regist.jsp。 不然会出错
- <action name="*">
- <result>/{1}.jsp</result>
- </action>
注册页面表单代码如下
- <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="/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.