8

Struts 検証を使用して、ユーザーが入力したさまざまなフィールドをチェックしようとしています。誰かが私に欠けているものを見るのを手伝ってくれるなら、私は非常に感謝しています. ここに私が持っているものがあります:

入れたり入れvalidation.xmlたりTestAction-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.xmlextendsには、拡張され、フィールドとstruts-defaultを持つ非常に単純なアクション クラスTestActionがあります。 ActionSupporttestInttestString

私が読んだところによると、入力された値を Struts がチェックするにはこれで十分なはずですが、それは起こっていません。私は何が欠けていますか?

4

4 に答える 4

6

モデルごとに検証するか、アクションごとに検証するかの 2 つの選択肢があります。アクション レベルで検証するには、単純に {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 に答える