Spring实战第五版第二章字段校验返回视图报错解决及javax.validation完整pom依赖

  • Post author:
  • Post category:java


Spring实战第五版第二章

2.3 校验表单输入

在编写”/design”页面post处理逻辑时,按照书本上直接’return “design”; ‘方式,会报如下错误:

Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'design' available as request attribute
	at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:153)
	at org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:903)
	at org.thymeleaf.spring5.context.webmvc.SpringWebMvcThymeleafRequestContext.getBindStatus(SpringWebMvcThymeleafRequestContext.java:227)
	at org.thymeleaf.spring5.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:306)
	at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:253)
	at org.thymeleaf.spring5.util.FieldUtils.getBindStatus(FieldUtils.java:227)
	at org.thymeleaf.spring5.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.java:174)
	at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
	... 63 more

个人猜测post请求时,model数据模型中的数据被清空,导致重新请求视图时,绑定的“design”对象为空,在渲染输入框中“design”对象属性时报错。可采用redirect方式重新请求“/design”的get方法,或重新设置model。

   @PostMapping
    public String processDesign(@Valid Taco design, Errors error,Model model){
        //若校验不生效,则检查valid依赖包是否引入完整
        if(error.hasErrors()){
            model.addAttribute("design",new Taco());
            return "design";//直接请求视图报错,可能因为model中的map.design为空
//            return "redirect:design";

        }
        log.info("processing design :"+design);
        return "redirect:/orders/current";//type=Not Found, status=404
//        return "/orders/current";//直接请求视图,未编辑网页时报错模板不存在
    }

通过传入model的方式解决报错后,请求校验不通过时前后页面变化如下图,原“ingredients”信息不再存在,进一步证实model中数据未在视图中保存。

ps:字段校验不生效,需检查javax.validation依赖包是否完整导入

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
</dependency>
<dependency>
    <groupId>com.fasterxml</groupId>
    <artifactId>classmate</artifactId>
    <version>1.3.3</version>
</dependency>



版权声明:本文为scold301原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。