2010-07-17 8 views
6

L'ho provato per un po 'ma non riesco a trovare la soluzione giusta.Verificare l'utilizzo di JSTL per l'errore di rilegatura a molla

Desidero utilizzare JSTL per verificare se sono presenti errori di associazione (errore di campo o errore globale) che si sono verificati in Spring MVC 2.5.

So che posso usare questo codice:

<p> 
    <spring:hasBindErrors name="searchItems"> 
     An Error has occured 
    </spring:hasBindErrors> 
</p> 

ma voglio utilizzare JSTL per verificare la presenza di eventuali errori.

Ho provato questo uno utilizza JSTL:

<c:if test="${not empty errors}"> 
    An Error has occured 
</c:if> 

Ma sembra che non riesco a catturare correttamente.

Ho bisogno di usare JSTL poiché ci sono altre parti del JSP che si basano sulla presenza o assenza di errori di binding.

risposta

6

Come detto

voglio utilizzare JSTL per controllare per eventuali errori

Basta usare (E funziona solo su Spring MVC 2.5 - Non portatile per Spring MVC 3.0 anche se i supponiamo è requestScope [ 'bindingResult. <COMMAND_NAME_GOES_HERE> .allErrors'])

<c:if test="${not empty requestScope['org.springframework.validation.BindingResult.<COMMAND_NAME_GOES_HERE>'].allErrors}"> 
    An Error has occured!!! 
</c:if> 

Tenete a mente predefinito nome del comando è il nome della classe comando non qualificato con la prima lettera in minuscolo. Avviso nome del comando soffietto è pet

private PetValidator petValidator = new PetValidator(); 

@RequestMapping(method.RequestMethod.POST) 
public void form(Pet command, BindingResult bindingResult) { 
    if(petValidator.validate(command, bindingResult)) { 
     // something goes wrong 
    } else { 
     // ok, go ahead 
    } 
} 

Così il vostro modulo dovrebbe apparire come

<!--Spring MVC 3.0 form Taglib--> 
<form:form modelAttribute="pet"> 

</form:form> 
<!--Spring MVC 2.5 form Taglib--> 
<form:form commandName="pet"> 

</form:form> 

A meno che non si utilizza @ModelAttribute

@RequestMapping(method.RequestMethod.POST) 
public void form(@ModelAttribute("command") Pet command, BindingResult bindingResult) { 
    // same approach shown above 
} 

In questo modo, il modulo dovrebbe apparire come

<!--Spring MVC 3.0 form Taglib--> 
<form:form modelAttribute="command"> 

</form:form> 
<!--Spring MVC 2.5 form Taglib--> 
<form:form commandName="command"> 

</form:form> 
3

Qualcosa di simile a questo:

<spring:hasBindErrors name="userName"> 
    <c:set var="userNameHasError" value="true" /> 
</spring:hasBindErrors> 

<c:choose> 
    <c:when test="${userNameHasError}"> 
     <%-- Display username as textbox --%> 
    </c:when> 
    <c:otherwise> 
     <%-- Display username as label --%> 
    </c:otherwise> 
</c:choose> 

probabilmente si può anche mettere una messa a punto gli errori di catturare tutti gli errori nella pagina (non testata):

<spring:hasBindErrors name="*"> 
    <c:set var="userNameHasError" value="true" /> 
</spring:hasBindErrors> 

Enjoy!

3

Dopo aver suonato in giro con <spring:hasBindErrors> tag, ho trovato aveva alcune limitazioni:

  • E 'utile solo quando ci sono errori.

  • org.springframework.validation.Errors oggetto è accessibile solo all'interno del tag

E se volevo solo sapere se ci sono errori o meno. Se non ci sono errori, <spring:hasBindErrors> è reso inutile. Dopo aver fatto qualche ricerca con il mio collega, abbiamo stampato tutti gli attributi della richiesta. Si scopre che c'è un attributo denominato:

org.springframework.validation.BindingResult.command

l'oggetto Command qui è il tuo oggetto comando modulo di supporto. Per quanto poco intuitivo possa essere chiamato, questo attributo contiene un riferimento al nostro oggetto Errori. Così, questo funziona:

${requestScope['org.springframework.validation.BindingResult.command'].errorCount} 

e ci dà una maniglia sopra il tanto ricercato errori oggetto in JSTL

Problemi correlati