2010-02-19 4 views
8

J'essaie d'utiliser la validation Struts pour vérifier les différents champs saisis par les utilisateurs. Si quelqu'un est capable de m'aider à voir ce qui me manque, je serais extrêmement reconnaissant. Voici ce que j'ai:Pourquoi la validation des entretoises ne fonctionne-t-elle pas pour moi?

Je mets validation.xml et TestAction-validation.xml dans WEB-INF/classes/

Voici 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> 

Voici 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> 

Mon struts.xml étend struts-default, et je une classe d'action extrêmement simple TestAction qui s'étend ActionSupport et a les champs testInt et testString. D'après ce que j'ai lu, cela devrait suffire à Struts pour vérifier les valeurs saisies, mais cela ne se produit pas. Qu'est-ce que je rate?

+0

Activer le mode dev (struts.devMode) si ce n'est pas le cas, pourrait vous donner plus d'indices sur ce qui se passe. – Nate

Répondre

6

Vous avez deux choix, validez par modèle ou par action. Pour valider au niveau de l'action, vous créez simplement un fichier qui prend le nom {votre action} -validation.xml et le place dans le même paquet que la classe Action. Pour valider au niveau du modèle, vous devez créer un fichier similaire qui prend le nom de l'objet de modèle, puis diriger votre fichier de validation d'action à valider par les règles dans le fichier de validation du modèle. (Reference)

Mettez validation.xml en racine de vos fichiers source java (package par défaut) et placez TestAction-validation.xml dans le même répertoire que votre fichier TestAction.java. La plupart des IDE copieront automatiquement toutes les ressources dans le répertoire correspondant où votre fichier de classe sera généré.

Mise à jour:

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

How Validators of an Action are Found

+0

Merci beaucoup. Une autre chose qui me manquait était d'inclure des balises comme '' dans ma JSP. –

+1

Vous êtes les bienvenus ... YaaaaHoooo cela a fonctionné :-) –

3

Il pourrait y avoir deux ou trois choses du haut de ma tête.

1) Utilisez-vous la pile d'intercepteurs par défaut - cette pile dispose d'un intercepteur de validation requis pour que la validation fonctionne, sinon vous devez spécifier l'intercepteur de validation manuellement dans votre pile. 2) TestAction-validation.xml devrait être sous WEB-INF/classes/[paquet] donc si l'action est com.foo.TestAction, alors TestAction-validation.xml devrait être sous WEB-INF/classes/com/foo/TestAction-validation.xml

3) Essayez d'utiliser le nom de la méthode à laquelle vous soumettez dans la classe TestAction dans le nom du fichier xml du validateur. Vous pouvez avoir TestAction- [method_to_be_validated] -validation.xml

Espérons que ça aide!

3

Peut-être parce que la définition dtd

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

n'est plus là

O n struts2 démarrage J'obtiens cette exception et mes intercepteurs de validation ne fonctionnent plus

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

Au moins un lien fourni par la réponse acceptée contient le nouveau DOCTYPE que vous devriez utiliser pour vos fichiers de métadonnées de validation: '' –

4

Remplacer le "<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">" avec une nouvelle nouvelle DTD

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

C'est la solution, cela fonctionnera . Pouvez-vous poster votre action mapping/struts.xml?

+0

OK, mais je ne pense pas que je vais vérifier . J'ai eu ce problème il y a plus de quatre ans, et je n'utilise plus autant Struts. –

+0

A travaillé pour moi! Merci ! – Fundhor

Questions connexes