struts2中validator配置文件验证不起作用的问题解决办法、根源

在采用struts的xml配置方式校验数据时,发现怎么也不起作用。无法按照正常流程,走到input指向的页面。

一   问题的解决

很多博客说明了自己查找的方式,最后都指明了是因为配置文件格式不正确的原因。出现这种问题的时候,应该从下面4个部分考虑:

1:文件名是否是 LogInAction-validation.xml 第一部分的名字必须与action类名对应一致。

2:struts.xml中同一个action下面,要配置input类型的返回结果,如同:

<action name="login" class="com.allen.ssh.action.LogInAction">
            <result name="success">/Welcome.jsp</result>
            <result name="error">/Register.jsp</result>
            <result name="input">/Register.jsp</result> 
        </action>

3:然后是检查 LogInAction-validation.xml 中指定的属性名字,是否与JSP页面中的属性名字一致。

4:然后是 LogInAction-validation.xml 文件格式是否正确,主要是指如下这一部分:

<!DOCTYPE validators PUBLIC
  "-//Apache Struts//XWork Validator 1.0.3//EN"
  "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

二  问题的根源

有一定的开发经验的童鞋,不管步骤是如何,都会整体的检查下来,因为这种校验文件只要与action类放在同一个包下,是自动加载的,无须关心是否还要在哪里配置。

但是我想说的是造成这种问题的根源,一般情况下,大家都是搜索某篇文章,然后跟着做例子,可是有时候使用的struts的版本不一致,贸然的使用了不同版本的配置,很可能会导致这种问题。

所以,参考别人做的东西时候,主要是看思路,具体到自己去实现的时候,要去自己下载的源码包下面,找到对应的文件:struts-2.3.16.3/src/xwork-core/src/main/resources/xwork-validator-1.0.3.dtd

打开看一下,里面说的:

<!--
  XWork Validators DTD.
  Used the following DOCTYPE.
</pre><p></p><p></p><pre name="code" class="html">  <!DOCTYPE validators PUBLIC
  "-//Apache Struts//XWork Validator 1.0.3//EN"
  "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
-->


 
  

那么直接拷贝过去使用即可。要知道1.0.2版本还是如下配置的:

</pre><pre>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"  
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 



所以不管直接使用还是修改为了 1.0.3,都会导致校验文件不起作用。


三    开发建议

从这个问题可以看出,再使用开源的框架时候,一定要使用软件本身自带的例子配置文件说明,而不是直接去网络上拷贝。这应该是一个早就形成的习惯。


最后,以strtus为例子,相关DTD文件,一般在下面的包里:

struts-2.3.16.3/src/

如果是validator:struts-2.3.16.3/src/xwork-core/src/main/resources/xwork-validator-1.0.3.dtd

如果是标签库:/Users/zhaoxin/Dev/struts-2.3.16.3/src/core/src/main/resources/struts-2.3.dtd

你可能感兴趣的:(xml,struts2,开源,开发经验)