【问题标题】:@Valid and Binding Result for Data from DB数据库中数据的@Valid 和绑定结果
【发布时间】:2012-06-06 17:12:41
【问题描述】:

我在其中一个 Web 应用程序中使用 Spring 验证(JSR 303)。当用户提交数据时我没有问题,并且 Spring 验证工作得非常整洁。但是我有一个场景,我必须从服务中获取数据并且验证它,然后将它们绑定到我的视图。(非表单验证)。在这种情况下我该如何使用 @Valid 还是必须以不同的方式完成?

这是一个示例代码,我从

开始
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView getView(
        @PathVariable("id") final String id, @User user,
        HttpSession session) {

    User user=  getUser();

   BindingResult result = new BeanPropertyBindingResult(user, "user");

   validator.validate(user, result);

   if(result.hasErrors()){
       logger.log(Level.ERROR, "Errors");
   }

  ModelAndView view = new ModelAndView ("home");
  view.addObject("user",user );
  view.addAllObject(result.getModel());

   return view;

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    据我了解,您需要将默认 org.springframework.validation.Validator 注入您的控制器(如果 @Valid 有效,您应该能够做到)

    @Autowired
    Validator validator;
    

    如下手动运行验证

    User user = ...;
    BindingResult result = BeanPropertyBindingResult(user, "user");
    validator.validate(user, result);
    

    并将结果合并到ModelMap(将其声明为您的方法的参数),如下所示

    model.addAllAttributes(result.getModel());
    

    【讨论】:

    • 感谢您的路径。我已更新我的帖子以包含我的更改。我的处理程序处理失败;嵌套异常是 java.lang.NoSuchFieldError: org/apache/log4j/Level.TRACE。我检查了我的 maven 依赖项,我对所有 Spring jars(3.1.0) 使用相同的版本。不确定这个错误。
    • 您是否将 log4j 作为您的依赖项之一? v1.2.x 或更高版本?
    • 抱歉,我应该在这里更新我的进度。是的,我的 maven 中有 slf4j 和 log4j。我必须把后者拿走。现在,我可以看到我的验证器和我的错误已将 bindingresult 设置为我的 modelAndView 但错误未反映在 jsp 中,我已使用代码更新了 initail 帖子。
    • 我传递了“错误”变量并在我的 jsp 中使用了用户。这导致错误在我看来没有绑定。我已经更新了我的帖子。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多