Spring MVC: лучший способ получить локализованные сообщения из метода контроллера? - PullRequest
2 голосов
/ 22 июня 2011

У меня есть контроллер Spring, которому нужно установить сообщение в области запроса и отправить пользователя обратно в форму из-за ошибок.Вот подпись метода:

public String update(HttpServletRequest request, 
   Model model,
   @ModelAttribute("command") User user,
   BindingResult result, SessionStatus status)

В методе объект запроса доступен, вот мой способ установки сообщения в области запроса, который я считаю запутанным.

.....
WebApplicationContext ctx = RequestContextUtils.getWebApplicationContext(reque st);
Locale locale = RequestContextUtils.getLocale(request);
request.setAttribute("formError", ctx.getMessage("errors.unique.value", new Object[]{new DefaultMessageSourceResolvable(new String[]{"label.userName"})}, locale));
.......

Вот мои вопросы:

  1. Является ли вышеуказанный способ верным для установки сообщения?

  2. Есть ли способ лучше или проще?

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Вы пытаетесь дать отзыв пользователю?Затем вы должны взглянуть на result.rejectValue(field, property)

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/validation/Errors.html#rejectValue%28java.lang.String,%20java.lang.String%29

Пример:

, если поле, по которому не прошла проверка, называется "new_password" исвойство языка называется "new_passwort_invalid", тогда вы можете обработать его следующим образом:

result.rejectValue("new_password", "new_passwort_invalid");

greets

0 голосов
/ 28 апреля 2017

(Даже если пост старый, надеюсь, это может быть полезно для других)

В конфигурации servlet-context.xml мы объявляем bean:

<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <beans:property name="basename" value="/WEB-INF/locale/messages" />
    <beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>

Затем в контроллеремы автоматически подключаем источник сообщения:

@Controller
public class SomeCtrl {

    @Autowired
    private MessageSource messageSource;
    ...

Наконец, в действии мы можем использовать локаль (добавив формальный параметр локали и используя сообщение):

@RequestMapping(value="/doLogin", method=RequestMethod.POST)
@ResponseBody
public String tryLogin(
                @ModelAttribute("loginBean") LoginBean loginBean,
                BindingResult result, SessionStatus status,
                Locale locale) {
    ....
    ....
    String generalErrorMsg = messageSource.getMessage("login.generalError",new Object[] {}, locale);
    ....
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...