Model view controller SpringMVC:从控制器内部获取本地化消息的更好方法?

Model view controller SpringMVC:从控制器内部获取本地化消息的更好方法?,model-view-controller,spring,localization,controller,Model View Controller,Spring,Localization,Controller,我有一个Spring控制器,它需要在请求范围内设置一条消息,并由于错误将用户发送回表单。以下是方法签名: public String update(HttpServletRequest request, Model model, @ModelAttribute("command") User user, BindingResult result, SessionStatus status) 在请求对象可用的方法中,以下是我在请求范围中设置消息的方法,我觉得这很复杂 ....

我有一个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));
.......
以下是我的问题:

  • 上述设置消息的方法正确吗

  • 有更好或更简单的方法吗


  • 谢谢你的帮助

    您是否试图向用户提供反馈?然后您应该查看
    result.rejectValue(字段、属性)

    例如:

    如果验证未通过的字段名为“
    new\u password
    ”,而language属性名为“
    new\u password\u invalid
    ”,则可以如下处理:

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

    (即使这篇文章很旧,我也希望它能对其他人有用)

    在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);
        ....
        ....