Spring MVC:从控制器方法中获取本地化消息的更好方法是什么?

时间:2011-06-22 18:46:07

标签: model-view-controller spring localization controller

我有一个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. 有更好或更简单的方法吗?

  3. 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您是否尝试向用户提供反馈?然后你应该看看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");

招呼

答案 1 :(得分:0)

(即使帖子陈旧,我希望这对其他人有用)

在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>

然后在控制器中我们自动装载messageSource:

@Controller
public class SomeCtrl {

    @Autowired
    private MessageSource messageSource;
    ...

最后在操作中我们可以使用locale(通过添加locale形式参数并使用消息):

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