首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring - Thymeleaf:异常处理模板

Spring - Thymeleaf:异常处理模板
EN

Stack Overflow用户
提问于 2019-05-25 08:19:30
回答 4查看 11.5K关注 0票数 7

我正在读一本书“行动中的春天”第五版,但我相信这是一个错误。

这是本书的GitHub。我到了第三章-jdbc 代码来源

当提交订单时,突然出现错误:

以这种方式在终点站:

2019-05-25 16:58:18.164错误11777 - nio-8080-exec-7 org.thymeleaf.TemplateEngine : THYMELEAF异常处理模板"orderForm":模板:“类路径资源模板/orderForm.html”)模板解析过程中发生的错误(模板:“类路径资源模板/orderForm.html”)

OrderController:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Controller
@RequestMapping("/orders")
@SessionAttributes("order")
public class OrderController {

    private OrderRepository orderRepo;

    public OrderController(OrderRepository orderRepo) {
        this.orderRepo = orderRepo;
    }

    @GetMapping("/current")
    public String orderForm() {
        return "orderForm";
    }

    @PostMapping
    public String processOrder(@Valid Order order, Errors errors,
                               SessionStatus sessionStatus) {
        if (errors.hasErrors()) {
            return "orderForm";
        }

        orderRepo.save(order);
        sessionStatus.setComplete();

        return "redirect:/";
    }

}

和orderForm:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Taco Cloud</title>
    <link rel="stylesheet" th:href="@{/styles.css}" />
</head>

<body>

<form method="POST" th:action="@{/orders}" th:object="${order}">
    <h1>Order your taco creations!</h1>

    <img th:src="@{/images/TacoCloud.png}"/>
    <a th:href="@{/design}" id="another">Design another taco</a><br/>

    <div th:if="${#fields.hasErrors()}">
        <span class="validationError">
        Please correct the problems below and resubmit.
        </span>
    </div>

    <h3>Deliver my taco masterpieces to...</h3>
    <label for="name">Name: </label>
    <input type="text" th:field="*{name}"/>
    <br/>

    <label for="street">Street address: </label>
    <input type="text" th:field="*{street}"/>
    <br/>

    <label for="city">City: </label>
    <input type="text" th:field="*{city}"/>
    <br/>

    <label for="state">State: </label>
    <input type="text" th:field="*{state}"/>
    <br/>

    <label for="zip">Zip code: </label>
    <input type="text" th:field="*{zip}"/>
    <br/>

    <label for="ccNumber">Credit Card #: </label>
    <input type="text" th:field="*{ccNumber}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('ccNumber')}"
          th:errors="*{ccNumber}">CC Num Error</span>

    <label for="ccExpiration">Expiration: </label>
    <input type="text" th:field="*{ccExpiration}"/>
    <br/>

    <label for="ccCVV">CVV: </label>
    <input type="text" th:field="*{ccCVV}"/>
    <br/>

    <input type="submit" value="Submit order"/>
</form>


</body>
</html>

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-30 14:03:16

我修正了添加delivery前缀的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Taco Cloud</title>
    <link rel="stylesheet" th:href="@{/styles.css}" />
</head>

<body>

<form method="POST" th:action="@{/orders}" th:object="${order}">
    <h1>Order your taco creations!</h1>

    <img th:src="@{/images/TacoCloud.png}"/>

    <h3>Your tacos in this order:</h3>
    <a th:href="@{/design}" id="another">Design another taco</a><br/>
    <ul>
        <li th:each="taco : ${order.tacos}"><span th:text="${taco.name}">taco name</span></li>
    </ul>

    <div th:if="${#fields.hasErrors()}">
        <span class="validationError">
        Please correct the problems below and resubmit.
        </span>
    </div>

    <h3>Deliver my taco masterpieces to...</h3>
    <label for="deliveryName">Name: </label>
    <input type="text" th:field="*{deliveryName}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('deliveryName')}"
          th:errors="*{deliveryName}">Name Error</span>
    <br/>

    <label for="deliveryStreet">Street address: </label>
    <input type="text" th:field="*{deliveryStreet}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('deliveryStreet')}"
          th:errors="*{deliveryStreet}">Street Error</span>
    <br/>

    <label for="deliveryCity">City: </label>
    <input type="text" th:field="*{deliveryCity}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('deliveryCity')}"
          th:errors="*{deliveryCity}">City Error</span>
    <br/>

    <label for="deliveryState">State: </label>
    <input type="text" th:field="*{deliveryState}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('deliveryState')}"
          th:errors="*{deliveryState}">State Error</span>
    <br/>

    <label for="deliveryZip">Zip code: </label>
    <input type="text" th:field="*{deliveryZip}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('deliveryZip')}"
          th:errors="*{deliveryZip}">Zip Error</span>
    <br/>

    <h3>Here's how I'll pay...</h3>
    <label for="ccNumber">Credit Card #: </label>
    <input type="text" th:field="*{ccNumber}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('ccNumber')}"
          th:errors="*{ccNumber}">CC Num Error</span>
    <br/>

    <label for="ccExpiration">Expiration: </label>
    <input type="text" th:field="*{ccExpiration}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('ccExpiration')}"
          th:errors="*{ccExpiration}">CC Num Error</span>
    <br/>

    <label for="ccCVV">CVV: </label>
    <input type="text" th:field="*{ccCVV}"/>
    <span class="validationError"
          th:if="${#fields.hasErrors('ccCVV')}"
          th:errors="*{ccCVV}">CC Num Error</span>
    <br/>

    <input type="submit" value="Submit order"/>
</form>

</body>
</html>
票数 3
EN

Stack Overflow用户

发布于 2019-05-25 08:51:24

您在th:object="${order}"模板中使用orderForm,但是Thymeleaf不知道它。您必须让Thymeleaf知道这个对象,将它传递给模板,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@GetMapping("/current")
public ModelAndView orderForm() {
    ModelAndView mv = new ModelAndView("orderForm");
    mv.addObject("order", new Order());
    return mv;
}

注意:您必须在模板中使用该对象的所有位置从控制器层传递该对象。

更新1

还更新了post方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PostMapping
public ModelAndView processOrder(@Valid Order order, Errors errors,
                           SessionStatus sessionStatus) {
    if (errors.hasErrors()) {
        ModelAndView mv = new ModelAndView("orderForm");
        mv.addObject("order", new Order());
        return mv;
    }

    orderRepo.save(order);
    sessionStatus.setComplete();

    return new ModelAndView("redirect:/");
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-25 09:09:03

我想你可以这样做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Controller
public class OrderController {

   @GetMapping("/orders")
   public String orders(Order order) {
      return "orderForm";
   }

   @PostMapping("/orders")
   public String orderForm(@Valid Order order, BindingResult result, Model model) {
       if(result.hasErrors()) {
           return "orderForm";
       } else {
           retrun "your_success_view";   
       }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56306637

复制
相关文章
Spring Boot 集成 Thymeleaf 模板
2. application.properties 文件中添加 Thymeleaf 模板配置
北漂的我
2019/05/29
4610
Spring Boot整合Thymeleaf模板引擎
什么是Thymeleaf Thymeleaf是一款用于渲染XML、XHTML、HTML5内容的模板引擎。类似Velocity,FreeMaker模板引擎,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。 Thymeleaf也是Spring Boot首要支持的模板引擎,并且在最新的Spring Boot版本中已经不再支持Velocity了。 官网:http://www.thymeleaf.org/ 引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖。
Java技术栈
2018/03/30
9000
Spring Boot整合Thymeleaf模板引擎
Thymeleaf异常处理Calling methods is forbidden for type
在thymeleaf模板中通过${session.SPRING_SECURITY_LAST_EXCEPTION.getMessage()}获取异常消息时报错
路过君
2023/05/01
3300
极简 Spring Boot 整合 Thymeleaf 页面模板
虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在做前后端不分的开发,而在前后端不分的开发中,我们就会需要后端页面模板(实际上,即使前后端分离,也会在一些场景下需要使用页面模板,例如邮件发送模板)。
江南一点雨
2019/06/18
1.3K0
首页JavaThymeleaf 模板引擎与Spring Boot
1,Thymeleaf是什么 ? Thymeleaf 是一个Java类库,是一个xml/xhtml/html5的模板引擎,可以作为MVC的Web应用的View层。 Thymeleaf 还提供额外与Spring MVC集成,可以使用Thymeleaf完全替代JSP。 2,Spring Boot 自动配置 Thymeleaf
cherishspring
2019/10/21
1.2K0
首页JavaThymeleaf 模板引擎与Spring Boot
SpringBoot集成Thymeleaf模板
1 创建一个maven工程,这个应该都会 2 pom文件加入下面内容即可(版本号自己改 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> <!-- lookup parent fro
JavaEdge
2018/04/28
7320
引入模板引擎thymeleaf
1、pom.xml 注入模板引擎thymeleaf依赖,切换thymeleaf版本为3.0
桑鱼
2020/03/17
1K0
Spring Boot 最佳实践(四)模板引擎Thymeleaf集成
Thymeleaf是一种Java XML / XHTML / HTML5模板引擎,可以在Web和非Web环境中使用。它更适合在基于MVC的Web应用程序的视图层提供XHTML / HTML5,但即使在脱机环境中,它也可以处理任何XML文件。它提供了完整的Spring Framework集成。
磊哥
2018/09/27
2.1K0
Spring Boot 最佳实践(四)模板引擎Thymeleaf集成
spring boot用ModelAndView向Thymeleaf模板传参数
最近在调试一个Spring Boot向Thymeleaf模板传参数的例子,但踩了很多坑,这里就把详细过程记录下来,以供大家参考。
用户1153489
2021/03/02
3K1
Spring Boot异常处理
@ExceptionHandler是一个注释,用于处理特定异常并将自定义响应发送到客户端。使用以下代码创建@ControllerAdvice类来全局处理异常 -
黑洞代码
2021/08/05
5980
Spring MVC处理异常
注意:使用SimpleMappingExceptionResolver处理异常时,不可以使用@ExceptionHandler!
爱撒谎的男孩
2018/05/10
1.3K1
Spring MVC处理异常
SpringBoot 之Thymeleaf模板.
    Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷:
JMCui
2018/10/12
1.1K0
SpringBoot 之Thymeleaf模板.
Spring Cloud 2.x系列之模板引擎thymeleaf
相对html+js的传统设计,现在很多网站都采用div&css+标签化+模块化的设计。模板引擎根据一定的语义,将数据填充到模板中,产生最终的HTML页面。模板引擎主要分两种:客户端引擎和服务端引擎。
BUG弄潮儿
2022/06/30
7440
Spring Cloud 2.x系列之模板引擎thymeleaf
SpringBoot集成Thymeleaf模板引擎
简单介绍 目前在JavaEE领域有几中比较常用的模板引擎,分别是Jsp、Velocity、Freemarker、Thymeleaf,对Freemark语法不是特别熟悉,不过对于前端页面渲染效率来说,jsp其实还是最快的,Velocity次之。Thymeleaf虽然渲染效率不是很快,但是语法方面是比较轻巧的,Thymeleaf语法比Velocity轻巧,但是渲染效率不如Velocity
SmileNicky
2019/03/04
6240
Spring boot with Thymeleaf
本文节选自电子书《Netkiller Java 手札》 5.19. Spring boot with Thymeleaf 5.19.1. Maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 5.19.2. application.properties #spring.t
netkiller old
2018/03/06
9300
Spring boot的异常处理
而我们一个前后端分离的架构,我们写的Restful API往往会被多个渠道访问,比如浏览器,app。而我们的spring boo会根据不同的渠道做出不同的响应,是浏览器发的就返回html,不是则是json。若报错回跳转到/error的URL,同一个URL不同的处理方式是由Spring boot提供的BasicErrorController错误控制器实现的。
用户7386338
2020/05/29
1.2K0
使用thymeleaf生成mybatis模板
我们在使用mybatis做数据库访问的时候,有很多重复的东西要写,如DAO里面的增删改查,mapper/provider里面的各种东东,还有实体类,其实这些都是可以通过名称关联起来的,因此就有这么一个需求,去写一个工具类,根据模板去生成这些文件
微笑的小小刀
2019/07/30
1.1K0
velocity模板引擎学习(3)-异常处理
按上回继续,前面写过一篇Spring MVC下的异常处理、及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一、404错误、500错误 1 <error-page> 2 <error-code>404</error-code> 3 <location>/nopage.do</location> 4 </error-page> 5 6 <error-page> 7 <error-co
菩提树下的杨过
2018/01/19
1.1K0
掌握 Spring 之异常处理
这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 Web 程序,如果不对程序中出现的异常进行适当的处理比如异常信息友好化,记录异常日志等等,直接将异常信息返回给客户端展示给用户,对用户体验有不好的影响。所以本篇文章主要探讨通过 Spring 进行统一异常处理的几种方式实现,以更优雅的方式捕获程序发生的异常信息并进行适当的处理响应给客户端。
闻人的技术博客
2019/09/19
1.8K0
掌握 Spring 之异常处理
spring 5 webflux异常处理
由于webflux也支持传统spring mvc的大部分注解,因此原来的ExceptionHandler也是支持的。
code4it
2018/09/17
1.3K0

相似问题

Spring未处理Thymeleaf模板

20

Hibernate、spring和thymeleaf :异常处理

10

Spring-boot和Thymeleaf无法处理模板

21

在spring引导中解析模板的Thymeleaf异常

10

Spring Boot - Thymeleaf模板

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文