我有一个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));
.......
以下是我的问题:
以上方式是否正确设置信息?
有更好或更简单的方法吗?
感谢您的帮助!
答案 0 :(得分:1)
您是否尝试向用户提供反馈?然后你应该看看result.rejectValue(field, property)
示例:
如果验证未通过的字段称为“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);
....
....