2012-11-05 5 views
5

to, czego szukam, jest bardzo łatwe do wytłumaczenia: Mam formularz, który musi obsługiwać zarówno włoski, jak i angielski. Załóżmy, że mam pole tekstowe wejściowe First Name. Etykieta forma będzie:Sprawdzanie poprawności Spring 3: using messages.property wpis inside errorArgs?

  • do pl: "Imię"
  • na to tak: "Nome"

czego chcę to komunikat błędu walidacji takie jak

  • dla EN: "wymagane jest pole Imię"
  • dla IT: "il campo Nome è richiesto”

pamiętać cytuję nazwę pola wewnątrz komunikatu o błędzie.

mam messages_en.properties z linii:

errors.empty.field = the {0} field is required 
registration.form.firstname = First Name 

i oczywiście messages_it.properties z liniami:

errors.empty.field = il campo {0} è richiesto 
registration.form.firstname = Nome 

Teraz w mojej klasy niestandardowe walidatora mam

ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{"registration.form.firstname"}, "the First Name is required"); 

która nie działa poprawnie. Wynik jest ciągiem "registration.form.username" takim jaki jest. Chciałbym wstawić nazwę pola z odpowiednimi ustawieniami narodowymi w czasie wykonywania. Czy jest jakiś sposób na zrobienie tego?

+0

przepraszam chciałem usunąć głupiego question..but tęsknię ścieżkę swojego question..could usuniesz swój komentarz .. – user533

+0

Właściwie to zadałem to pytanie w momencie, gdy nie wiem, co to jest Source. – user533

Odpowiedz

2

To jedno podejście, nie powinno być tam lepiej się czyjaś choć:

wstrzyknąć messageSource do sterownika lub walidatora:

@Autowired MessageSource messageSource 

W kontrolerach @RequestMapping metoda, wziąć w Locale jako Parametr, Spring zapełni go dla Ciebie.

@RequestMapping(...) 
public String myMethod(..., Locale locale){ 
    ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{messageSource.getMessage("registration.form.firstname", new Object[]{}, locale)}, "the First Name is required"); 
.... 
} 

Aktualizacja:

można uzyskać uchwyt na Locale w Walidatora użyciu LocaleContextHolder

+0

Jest coś, czego nie dostaję. Moja klasa CustomValidator implementuje Validator form org.springframework.validation.Validator. CustomValidator musi zdefiniować validate (Object target, Errors errors), który nie zezwala na parametr Locale. jak przekazać obiekt ustawień narodowych do walidatora? – MaVVamaldo

+0

Dodałem aktualizację, można użyć wywołania statycznego 'LocaleContextHolder.getLocale()'. Czuje się trochę okrężnie, poleciłbym czekać na więcej odpowiedzi, musi być prostszy sposób na zrobienie tego. –

+0

dziękuję bardzo za porady i życzliwość. – MaVVamaldo