2010-02-19 107 views
8

我正在尝试使用Struts验证来检查用户输入的各个字段。如果任何人能够帮助我看到我缺乏的东西,我会非常感激。下面是我有:为什么struts验证不适合我?

我把validation.xmlTestAction-validation.xmlWEB-INF/classes/

这里是validation.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC 
    "-//OpenSymphony Group//XWork Validator Config 1.0//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> 

<validators> 
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> 
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> 
    . . . 
</validators> 

这里是TestAction-validation.xml

<!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="testInt"> 
    <field-validator type="int"> 
     <param name="min">0</param> 
     <param name="max">9</param> 
     <message>Number not in range</message> 
    </field-validator> 
    </field> 
    <field name="testString"> 
    <field-validator type="stringlength"> 
     <param name="minLength">4</param> 
     <message>String not long enough.</message> 
    </field-validator> 
    </field> 
</validators> 

struts.xml延伸struts-default,我有一个非常简单的行动类TestAction,其延伸ActionSupport且具有字段testInttestString

从我读过,这应该足以对Struts检查值输入,但情况并非如此。我错过了什么?

+0

你可以发布你的动作映射/ struts.xml吗?如果没有开启dev模式(struts.devMode),可能会为您提供更多关于发生的事情的线索。 – Nate 2010-02-22 18:44:00

回答

6

你有两个选择,验证在每个模型的基础上或每次动作。要在Action级别进行验证,您只需创建一个名为{your action} -validation.xml的文件,并将其与Action类放在同一个包中。要在模型级别进行验证,您需要创建一个类似的文件,该文件采用模型对象的名称,然后根据模型验证文件中的规则指示您的Action验证文件进行验证。 (Reference

将validation.xml放入java源文件(默认包)的根目录下,并将TestAction-validation.xml放在TestAction.java文件所在的同一目录中。大多数IDE将自动将所有资源复制到您的类文件将生成的相应目录。

更新:

http://struts.apache.org/2.x/docs/validation.html

How Validators of an Action are Found

+0

非常感谢。我还缺少一件事是在我的JSP中包含诸如''的标签。 – 2010-02-27 12:17:07

+1

欢迎... YaaaaHoooo它的工作原理:-) – 2010-03-01 16:14:07

3

有可能是一对夫妇的我的头顶的东西。

1)您使用的是默认的拦截器栈 - 这堆具有这是需要验证工作验证拦截器,否则,您必须在您的堆栈手动指定验证拦截。

2)TestAction-validation.xml应该位于WEB-INF/classes/[package]下,如果action是com.foo.TestAction,那么TestAction-validation.xml应该位于WEB-INF/classes/com /富/ TestAction-validation.xml中

3)尽量使用方法的名称到您在TestAction类中的验证XML文件的名称提交。你可以有TestAction- [method_to_be_validated] -validation.xml

希望帮助!

3

也许因为DTD定义

http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd

不再有

Ø ñstruts2的启动我得到这个例外,我的验证拦截器不再

Line: 1436 - sun/net/www/protocol/http/HttpURLConnection.java:1436:-1 
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115) 
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184) 
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.<init>(DefaultValidatorFactory.java:55) 

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) 
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) 
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) 
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
+0

至少有一个由接受的答案提供的链接包含您应该用于验证元数据文件的新DOCTYPE:'<!DOCTYPE validators PUBLIC“ - // Apache Struts// XWork Validator 1.0.3 // EN“”http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd“>' – 2013-07-01 20:43:06

4

正与新新DTD更换 “<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 

这是解决方案,它将工作。

+0

好的,但我不认为我要检查。四年前我遇到过这个问题,而且我现在不再使用Struts了。 – 2014-04-28 08:46:06

+0

为我工作!谢谢 ! – Fundhor 2015-06-10 09:28:49