我用Struts 2.0的输入效验框架对表单的输入项进行了的效验,配置代码如下:
<?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="requiredstring">
<param name="trim">true</param>
<message>Username is required</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>size of username should between 6-20</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Password is required</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>size of password should between 6-20</message>
</field-validator>
</field>

<field name="repassword">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>repassword is required</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{6,20})]]></param>
<message>size of repassword should between 6-20</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(repassword==password)]]></param>
<message>The repassword and the password is not the same</message>
</field-validator>
</field>
<field name="nickname">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>the nickname is require</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[([\u4e00-\u9fa5]{2,20})]]></param>
<message>The nickname should between 2-20</message>
</field-validator>
</field>
<field name="answer">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>answer is required</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[([\u4e00-\u9fa5]{5,50})]]></param>
<message>The answer should between 5-50</message>
</field-validator>
</field>

</validators>但是当效验失败返回input 视图的时候,之前输入的信息没有了,怎么能保留之前输入的信息的?

解决方案 »

  1.   

     不是我说,你直接js不行吗? 什么都要指望Struts 
      

  2.   

    嗯 直接写js吧,用struts觉得麻烦 我们几乎不用
      

  3.   

     下回Spring也弄个集成的 你在去学?
      

  4.   

    有js很好用啊struts2的没什么好的...struts2主要体现mvc不是体现这个,你就用js的正则表达式就够你用了...
      

  5.   

    这个要看你的JSP也没引用的是什么标签了<s:textfield可以的 <input这样不行的
      

  6.   

    对于楼主的要求, 正常情况下struts2本身是能实现的. struts提交的值是通过ValueStack保存, 返回原页面后值应该是会回显的. 可能是某个拦截器缺少了.当然也要看你页面时怎么写的.如果是用struts自带的标签, 如textfield等会自动把值回显.
    如果是html的<input type="text".../> 之类的, 别玩两个 value="${action.xxxx}"你的struts.xml配置文件也发上来看看. package是不是继承至struts-default.
      

  7.   

    这个是struts.xml<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.configuration.xml.reload" value="true"/>
    <constant name="struts.i18n.encoding" value="GBK" />
    <package name="struts2" extends="struts-default">
    <action name="register" class="registerAction" method="execute">
    <result name="error">/error.jsp</result>
    <result name="success">/success.jsp</result>
    </action>

    <action name="login" class="loginAction" method="execute">
    <result name="error">/login.jsp</result>
    <result name="success">/success.jsp</result>
    </action>
    </package>

    </struts>
      

  8.   


    同意你的看法 我也碰到过 struts做验证 确实不怎么好 但struts既然有这个验证 说明还是有用的