Ho un modulo che desidero convalidare. Contiene 2 variabili di indirizzo. address1 ha sempre essere convalidati, indirizzo2 deve essere convalidato in base ad alcune condizioniSpring MVC e JSR-303 hibernate convalida convalida
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
mio controller convalida e si lega automaticamente la mia forma obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
il problema è che se uso il validatore LocalValidatorFactoryBean i non può riutilizzare l'oggetto BinidingResult fornito da Spring. Il bind non funziona come l'oggetto di destinazione del 'risultato' è 'MyForm' e non 'Indirizzo'
validate(form.getAddress2(), bindingResult) //won't work
mi chiedo qual è il/approccio standard pulito per fare la convalida condizionale.
Stavo pensando di creare un nuovo BindingResult al mio controller.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
ma poi la lista degli errori ottengo da bindingResultAddress2 non possono essere aggiunti al generale 'bindingResult' come i nomi dei campi non sono corretti ('street' invece di 'address2.street') ed il legame non funzionerà
Un approccio sporco sarebbe estendere BeanPropertyBindingResult per accettare alcune stringhe da aggiungere al nome del campo .. hai un approccio migliore?
Grazie axtavt, funziona. Mi chiedo se questo sia l'approccio migliore per farlo, perché non ci sono attributi di gruppo in @Valid e se il concetto di gruppi JSR-303 è l'unico modo per ottenere la convalida condizionale – mickthompson
C'è una richiesta di funzione per i gruppi in '@ Valido' : https://jira.springframework.org/browse/SPR-6373 – axtavt
molto utile, grazie – mickthompson