2010-02-19 14 views
8

Ich versuche, die Struts-Validierung zu verwenden, um verschiedene Felder zu überprüfen, die von Benutzern eingegeben wurden. Wenn jemand mir helfen kann zu sehen, was mir fehlt, wäre ich sehr dankbar. Hier ist, was ich habe:Warum funktioniert die Validierung der Struts nicht?

Ich habe validation.xml und TestAction-validation.xml in WEB-INF/classes/

Hier ist 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> 

Hier ist 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> 

Mein struts.xml erstreckt struts-default, und ich habe eine sehr einfache Aktionsklasse TestAction, die ActionSupport erweitert und Felder testInt und testString hat.

Von dem, was ich gelesen habe, sollte dies für Struts ausreichen, um die eingegebenen Werte zu überprüfen, aber es passiert nicht. Was vermisse ich?

+0

Können Sie Ihre Aktion mapping/struts.xml posten? Wenn du den dev-Modus (struts.devMode) aktivierst, falls dies nicht der Fall ist, könntest du mehr Hinweise dazu bekommen, was passiert. – Nate

Antwort

6

Sie haben zwei Auswahlmöglichkeiten, die auf einer Modellbasis oder pro Aktion validiert werden. Um auf der Aktionsebene zu validieren, erstellen Sie einfach eine Datei mit dem Namen {Ihre Aktion} -validation.xml und legen sie im selben Paket wie die Action-Klasse ab. Um auf Modellebene zu validieren, würden Sie eine ähnliche Datei erstellen, die den Namen des Modellobjekts annimmt und dann Ihre Aktionsüberprüfungsdatei an die Regeln in der Validierungsdatei des Modells übergibt. (Reference)

Setzen Sie validation.xml in das Stammverzeichnis Ihrer Java-Quelldateien (Standardpaket) und legen Sie TestAction-validation.xml in demselben Verzeichnis ab, in dem sich Ihre TestAction.java-Datei befindet. Die meisten IDEs kopieren automatisch alle Ressourcen in das entsprechende Verzeichnis, in dem die Klassendatei erzeugt wird.

Update:

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

How Validators of an Action are Found

+0

Vielen Dank. Eine weitere Sache, die mir fehlte, war die Aufnahme von Tags wie '' in meine JSP. –

+1

Sie sind willkommen ... YaaaaHoooo hat funktioniert :-) –

3

Es könnte ein paar Dinge von der Spitze meines Kopfes sein.

1) Verwenden Sie den Standard-Interceptor-Stack - dieser Stack verfügt über einen Validierungsinterceptor, der für die Validierung erforderlich ist, andernfalls müssen Sie den Validierungsinterceptor manuell in Ihrem Stack angeben.

2) TestAction-validation.xml sollte unter WEB-INF/classes/[Paket] sein. Wenn die Aktion also com.foo.TestAction ist, dann sollte sich TestAction-validation.xml unter WEB-INF/classes/com/befinden. foo/TestAction-validation.xml

3) Versuchen Sie den Namen der Methode zu verwenden, an die Sie in der TestAction-Klasse im Namen der Validator-XML-Datei senden. Sie können TestAction- [method_to_be_validated] -validation.xml haben

Hoffe, dass hilft!

3

Vielleicht, weil die dtd Definition

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

ist nicht mehr da

O n struts2 Start Ich erhalte diese Ausnahme und meine Validierung Abfangjäger arbeiten nicht mehr

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

Mindestens ein Link, der von der angenommenen Antwort bereitgestellt wird, enthält den neuen DOCTYPE, den Sie für Ihre Validierungsmetadatendateien verwenden sollten: '' –

4

Ersetzen Sie die „<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">“ mit neuen neuen DTD

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

Dies ist die Lösung, wird es funktionieren .

+0

OK, aber ich denke nicht, dass ich das überprüfen werde . Ich hatte dieses Problem vor über vier Jahren und verwende Struts nicht mehr so ​​oft. –

+0

Arbeitete für mich! Vielen Dank ! – Fundhor

Verwandte Themen