2010-02-19 7 views
8

Sto provando a utilizzare la convalida Struts per controllare i vari campi inseriti dagli utenti. Se qualcuno è in grado di aiutarmi a vedere ciò che mi manca, sarei estremamente grato. Ecco quello che ho:Perché la validazione dei puntelli non funziona per me?

ho messo validation.xml e TestAction-validation.xml in WEB-INF/classes/

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

Qui è 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> 

mio struts.xml estende struts-default, e ho una classe di azioni estremamente semplice TestAction che si estende ActionSupport e ha campi testInt e testString.

Da quello che ho letto, questo dovrebbe essere sufficiente per Struts per controllare i valori inseriti, ma non sta accadendo. Cosa mi manca?

+0

Puoi pubblicare il tuo action mapping/struts.xml? Attivare la modalità dev (struts.devMode), se non lo è, potrebbe fornire più indizi su ciò che sta accadendo. – Nate

risposta

6

Hai due scelte, la convalida in base al modello o per-action. Per convalidare a livello di azione, devi semplicemente creare un file che prende il nome {your action} -validation.xml e inserirlo nello stesso pacchetto della classe Action. Per convalidare a livello di modello, devi creare un file simile che prende il nome dell'oggetto modello e quindi indirizza il file di convalida di Action per convalidare secondo le regole nel file di convalida del modello. (Reference)

Put validation.xml in radice dei vostri file sorgente Java (pacchetto di default) e mettere TestAction-validation.xml nella stessa directory in cui si trova il file TestAction.java. La maggior parte degli IDE copierà automaticamente tutte le risorse nella rispettiva directory in cui verrà generato il file di classe.

Aggiornamento:

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

How Validators of an Action are Found

+0

Grazie mille. Un'altra cosa che mi mancava era includere tag come '' nel mio JSP. –

+1

Prego ... YaaaaHoooo ha funzionato :-) –

3

Ci potrebbe essere un paio di cose della parte superiore della mia testa.

1) Si utilizza lo stack interceptor predefinito: questo stack ha un intercettore di convalida richiesto per la convalida, altrimenti è necessario specificare manualmente l'intercettatore di convalida nello stack.

2) TestAction-validation.xml deve essere in WEB-INF/classes/[pacchetto], quindi se l'azione è com.foo.TestAction, allora TestAction-validation.xml deve essere in WEB-INF/classes/com/foo/TestAction-validation.xml

3) Provare a utilizzare il nome del metodo a cui si sta presentando all'interno della classe TestAction nel nome del file XML validatore. Puoi avere TestAction- [method_to_be_validated] -validation.xml

Sperare che aiuti!

3

Forse perché la definizione DTD

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

non c'è più

O startup n Struts2 sto ottenendo questa eccezione e le mie intercettori di convalida non funzionano più

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

Almeno un link fornito dalla risposta accettata contiene il nuovo DOCTYPE che dovresti usare per i tuoi file di metadati di convalida: '' –

4

Sostituire il "<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">" con il nuovo nuovo DTD

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

Questa è la soluzione, funzionerà .

+0

OK, ma non penso che vado a controllare . Ho avuto questo problema più di quattro anni fa e non uso più Struts. –

+0

ha funzionato per me! Grazie ! – Fundhor