2010-02-19 16 views
8

Estoy tratando de usar la validación de Struts para verificar varios campos ingresados ​​por los usuarios. Si alguien puede ayudarme a ver lo que me falta, estaría extremadamente agradecido. Aquí es lo que tengo:¿Por qué la validación de struts no funciona para mí?

puse validation.xml y TestAction-validation.xml en WEB-INF/classes/

aquí es 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> 

Aquí se 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> 

Mi struts.xml extiende struts-default, y tengo una clase de acción extremadamente simple TestAction que se extiende ActionSupport y tiene campos testInt y testString.

Por lo que he leído, esto debería ser suficiente para que Struts compruebe los valores ingresados, pero no está sucediendo. ¿Qué me estoy perdiendo?

+0

¿Puedes publicar tu action mapping/struts.xml? Activar el modo dev (struts.devMode) si no es así, podría darle más pistas sobre lo que está sucediendo. – Nate

Respuesta

6

Tiene dos opciones, validar por modelo o por acción. Para validar en el nivel de Acción, simplemente debe crear un archivo que tome el nombre {your action} -validation.xml y colocarlo en el mismo paquete que la clase Action. Para validar en el nivel del modelo, debe crear un archivo similar que tome el nombre del objeto modelo y luego dirigir su archivo de validación de la acción para validar según las reglas en el archivo de validación del modelo. (Reference)

Ponga validation.xml en la raíz de sus archivos fuente java (paquete predeterminado) y ponga TestAction-validation.xml en el mismo directorio donde está ubicado su archivo TestAction.java. La mayoría de los IDE copiarán automáticamente todos los recursos al directorio respectivo donde se generará su archivo de clase.

Actualización:

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

How Validators of an Action are Found

+0

Muchas gracias. Una cosa más que me faltaba era incluir etiquetas como '' en mi JSP. –

+1

De nada ... YaaaaHoooo funcionó :-) –

3

Podría haber un par de cosas de la parte superior de mi cabeza.

1) ¿Está utilizando la pila de interceptor predeterminada? Esta pila tiene un interceptor de validación que se requiere para que la validación funcione; de ​​lo contrario, debe especificar el interceptor de validación manualmente en la pila.

2) TestAction-validation.xml debe estar en WEB-INF/classes/[package] así que si la acción es com.foo.TestAction entonces TestAction-validation.xml debe estar en WEB-INF/classes/com/foo/TestAction-validation.xml

3) Intente utilizar el nombre del método que está enviando dentro de la clase TestAction en el nombre del archivo validator xml. Puede tener TestAction- [method_to_be_validated] -validation.xml

Espero que ayude!

3

Tal vez porque la definición DTD

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

ya no está allí

O inicio n struts2 estoy recibiendo esta excepción y mis interceptores de validación ya no funcionan

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

Al menos un enlace proporcionado por la respuesta aceptada contiene el nuevo DOCTYPE que debe utilizar para sus archivos de metadatos de validación: '' –

4

Sustituir el "<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">" con la nueva nueva DTD

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

Ésta es la solución, que funcionará .

+0

OK, pero no creo que voy a verificar . Tuve este problema hace más de cuatro años y ya no uso Struts. –

+0

¡Funcionó para mí! Gracias ! – Fundhor

Cuestiones relacionadas