2013-08-19 64 views
0

在问这里之前,我在这里搜索了很多内容,找到一个有用的内容,但是我无法解决我的问题。Hibernate @Valid和Spring MVC

我正在学习使用Spring MVC和Hibernate Validator以及i18n支持。当表单需要验证时,我的问题是相关的,下面是我生成的代码。

豆用户

@Entity(name="users") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @NotEmpty 
    private String firstName; 
    private String lastName; 

} 

UserController中

@Secured("ROLE_USER") 
@RequestMapping(value = "/save", method = RequestMethod.POST) 
public String doSave(@ModelAttribute("formUsuario") @Valid br.com.rodrigoferra.domain.User user, BindingResult results, Model model) { 

     UserValidator userValidator = new UserValidator(); 

     userValidator.validate(user, results); 

     if(results.hasErrors()) { 
      return "users/edit"; 
     } 

     user = userService.create(user); 

     return "redirect:/users/"; 

    } 

UserValidator

public class UserValidator implements Validator { 

    @Autowired private MessageSource messageSource; 

    protected static Logger logger = Logger.getLogger("controller"); 

    public boolean supports(Class<?> clazz) { 
     return User.class.equals(clazz); 
    } 

    public void validate(Object target, Errors errors) { 
     logger.info("Entrou em validate"); 

    User user = (User) target; 

    if (user.getFirstName() == null) { 
     errors.rejectValue("firstName", "NotEmpty.user.firstName"); 
    } 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "NotEmpty.user.firstName"); 

    } 

} 

其中messages.properties所在的位置: enter image description here 最后,applicationContext.xml中

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames" value="classpath:/resources/i18n/messages, classpath:/resources/i18n/errors" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 

    <bean name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
     <property name="validationMessageSource"> 
      <ref bean="messageSource" /> 
     </property> 
    </bean> 

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.FixedLocaleResolver"> 
     <property name="defaultLocale" value="pt_BR" /> 
    </bean> 

报告该错误是在执行方法:

GRAVE: Servlet.service() for servlet [spring] in context with path [/simpla-spring-version] threw exception [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/layouts/simpleLayout.jsp'.] with root cause 
org.springframework.context.NoSuchMessageException: No message found under code 'NotEmpty.user.firstName' for locale 'pt_BR'. 

messages_pt_BR.properties,同样以messages.properties:

NotEmpty.user.firstName = Name is required! 

好,I'm越来越疯狂吧,已经改变了位置,尝试了很多在网络和春季论坛上创建的示例......我感谢任何帮助。

对不起,我的英语不好。

+0

有错误,它试图显示消息NotEmpty.user.firstname,但message.properties不包含该属性 – orangegoat

+0

对不起,我忘了添加messages.properties! –

回答

0

消息文件路径错误,资源目录的内容直接添加到类路径(就像java目录)。更多信息可在maven网站

所以不是classpath:/resources/i18n/messages使用classpath:/i18n/messages和相同GOED上发现错误ofcourse文件。

+0

我会测试,该消息需要NotEmpty作为前缀? NotEmpty.user.firstName或只是user.firstName? –