8

我正在尝试使用 Struts 验证来检查用户输入的各个字段。如果有人能够帮助我了解我所缺乏的东西,我将非常感激。这是我所拥有的:

我放入validation.xmlTestAction-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>

这里是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 检查输入的值,但它没有发生。我错过了什么?

4

4 回答 4

6

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

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

更新:

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

如何找到操作的验证器

于 2010-02-25T01:57:42.193 回答
4

也许是因为 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)
于 2013-06-19T17:25:42.733 回答
4

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

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

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

于 2014-04-27T17:20:11.960 回答
3

我的头顶可能有几件事。

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

2) TestAction-validation.xml 应该在 WEB-INF/classes/[package] 下所以如果动作是 com.foo.TestAction 那么 TestAction-validation.xml 应该在 WEB-INF/classes/com/foo/TestAction-验证.xml

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

希望有帮助!

于 2010-02-22T02:19:13.963 回答