2010-02-19 104 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