Validation 为什么struts验证不适合我?

Validation 为什么struts验证不适合我?,validation,struts2,struts-validation,Validation,Struts2,Struts Validation,我试图使用Struts验证来检查用户输入的各种字段。如果有人能帮我看到我所缺少的,我将不胜感激。以下是我所拥有的: 我把validation.xml和TestAction validation.xml放在WEB-INF/classes/ 下面是validation.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Va

我试图使用Struts验证来检查用户输入的各种字段。如果有人能帮我看到我所缺少的,我将不胜感激。以下是我所拥有的:

我把
validation.xml
TestAction validation.xml
放在
WEB-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>
<!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
,并有字段
testInt
testString


从我所读到的内容来看,这应该足以让Struts检查输入的值,但事实并非如此。我错过了什么?

我的头顶上可能有几样东西

1) 是否使用默认侦听器堆栈-此堆栈具有验证工作所需的验证侦听器,否则必须在堆栈中手动指定验证侦听器

2) TestAction-validation.xml应该在WEB-INF/classes/[package]下,因此如果操作是com.foo.TestAction,那么TestAction-validation.xml应该在WEB-INF/classes/com/foo/TestAction-validation.xml下

3) 尝试在TestAction类中以验证器xml文件的名称使用要提交到的方法的名称。您可以使用TestAction-[method\u to\u be\u validation]-validation.xml


希望有帮助

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

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

更新:


可能是因为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)
Line:1436-sun/net/www/protocol/http/HttpURLConnection.java:1436:-1
位于com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
位于com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory。(DefaultValidatorFactory.java:55)
原因:java.io.IOException:服务器返回了URL的HTTP响应代码:403:http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
位于org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(未知源)
位于org.apache.xerces.impl.XMLEntityManager.startenty(未知来源)
位于org.apache.xerces.impl.XMLEntityManager.startdentity(未知源)
位于org.apache.xerces.impl.xmldtddscannerimpl.setInputSource(未知源)
在org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(未知来源)
位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知来源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XMLParser.parse(未知源)
位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源)
更换 “
” 使用新的DTD

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


这就是解决方案,它会起作用。

您可以发布您的操作映射/struts.xml吗?如果不是的话,打开开发模式(struts.devMode),可能会给您提供更多关于发生了什么的线索。非常感谢。我还缺少一件事,那就是在我的JSP中包含像
这样的标记。接受答案提供的至少一个链接包含您应该用于验证元数据文件的新DOCTYPE:
好,但我不想检查。我在四年前就遇到了这个问题,我不再那么多地使用Struts了。为我工作!谢谢