您好我有一些Ajax Forms
,我使用Async POST
向服务器发送数据......
如果BindingResult
出现错误,我想在输入字段后面显示一条消息来解释错误,这是我控制器中的方法:
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Map<String, String> create(@Valid MyClass myClass, BindingResult bindingResult, Model uiModel,
HttpServletRequest httpServletRequest, HttpServletResponse response, Locale locale) {
if (bindingResult.hasErrors()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
Map<String, String> errorFields = new HashMap<String, String>();
for(FieldError fieldError : bindingResult.getFieldErrors()){
errorFields.put(fieldError.getField(), fieldError.getDefaultMessage());
}
return errorFields;
}
uiModel.asMap().clear();
myService.create(personale);
return null;
}
并且有效,但fieldError.getDefaultMessage()
会返回英语消息,但我想要返回本地化消息..
我知道我可以这样做:
@NotNull(message="{myMessage}")
private Field field;
但是我不会为每个字段指定本地化的消息,也许我可以使用message.properties
文件??
有可能吗?
谢谢!
我读到了这个:another question about my problem,但我无法从消息中得到......
答案 0 :(得分:3)
我遇到了同样的问题,我可以通过这种方式解决它:
在配置文件(dispatcher-servlet.xml)中包含这些元素,以便正确初始化Spring的类l18n相关
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>mybasename</value>
</property>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale">
<value>es</value>
</property>
在您的控制器中,获取对ResourceBundleMessageSource bean的引用。
@Autowired
private ResourceBundleMessageSource mensajes;
然后,您可以通过getMessage方法获取错误消息getMessage(MessageSourceResolvable arg0,Locale arg1)
@RequestMapping(path = "/login", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<Validacion> login(@Valid @RequestBody LoginUsuario login_usuario, BindingResult result) {
if (result.hasErrors())
{
System.out.println("HAY ERRORES");
System.out.println(mensajes.getMessage(result.getFieldError(), LocaleContextHolder.getLocale()));
}