【问题标题】:Spring thymeleaf problems: exception processing templateSpring thymeleaf 问题:异常处理模板
【发布时间】:2018-09-21 15:06:59
【问题描述】:

我正在使用 spring 和 thymeleaf 构建一个简单的 Web 服务。这就是现在的代码: 控制器:

package com.Basi.CheBBellaEmittente.Pages.Control;


@Controller
public class SimpleController {
    @GetMapping("/nuovo-utente")
    public String viewInserisciUtente(Model model){
        model.addAttribute("nuovoUtente", new Utente());
        return "nuovo-utente";
    }

    @PostMapping("/nuovo-utente")
    public void memorizzaUtente(@ModelAttribute Utente utente){
        System.out.println(utente.getId());
    }
}

型号:

package com.Basi.CheBBellaEmittente.Pages.Model;

public class Utente {
    private String id;
    private String citta=null;
    private String genere;
    private String data_nascita=null;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCitta() {
        return citta;
    }

    public void setCitta(String citta) {
        this.citta = citta;
    }

    public String getGenere() {
        return genere;
    }

    public void setGenere(String genere) {
        this.genere = genere;
    }

    public String getData_nascita() {
        return data_nascita;
    }

    public void setData_nascita(String data_nascita) {
        this.data_nascita = data_nascita;
    }
}

html页面:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Inserisci un nuovo utente</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>Form</h1>
    <form action="#" th:action="@{/nuovo-utente}" th:object="${com.Basi.CheBBellaEmittente.Pages.Model.Utente}" method="post">
        <p>Id: <input type="text" th:field="*{id}" /></p>
        <p>Città: <input type="text" th:field="*{citta}" /></p>
        <p>Genere: <input type="text" th:field="*{genere}" /></p>
        <p>Data nascita: <input type="text" th:field="*{data_nascita}" /></p>
        <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
    </form>
</body>
</html>

和错误:

2018-09-21 16:51:40.668 ERROR 3132 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "nuovo-utente": Exception evaluating SpringEL expression: "com.Basi.CheBBellaEmittente.Pages.Model.Utente" (template: "nuovo-utente" - line 9, col 51)

那么,我能做些什么来处理这种情况呢?我不知道这有什么问题,是一个非常简单的代码。你能给我一些建议吗?我想是一些折叠包问题,但我不明白是什么。

【问题讨论】:

    标签: java spring thymeleaf


    【解决方案1】:

    由于您的模型属性名为 nuovoUtente -- model.addAttribute("nuovoUtente", new Utente());,因此您应该将其用作 th:object。

    &lt;form action="#" th:action="@{/nuovo-utente}" th:object="${nuovoUtente}" method="post"&gt;

    这样的表达式:${com.Basi.CheBBellaEmittente.Pages.Model.Utente} 将被解释为:com.getBasi().getCheBBellaEmittente().getPages().getModel().getUtente()——这没有意义。

    【讨论】:

    • 谢谢,但现在 post 方法给了我错误:执行处理器 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' 时出错(模板:“nuovo-utente” - 第 10 行,第 32 列)
    • 不太确定我应该怎么做..?你原来的问题得到回答了吗?
    【解决方案2】:

    在您的控制器中,您将模型属性的名称设置为 nuovoUtente,因此您必须在 html 上执行下一步:

    <form action="#" th:action="@{/nuovo-utente}" th:object="${nuovoUtente}" method="post">
    

    您想要创建并提交表单。在@GetMapping 和@PostMapping 你必须设置不同的url。

    例如:

    @GetMapping(/nuevo-utente-form) 和@PostMapping(/nuevo-utente)

    在 nuevo-utetente-form.html 中编写表单的代码,在 nuevo-utetente.html 中编写接受表单的代码。

    【讨论】:

    • 我编辑了我的帖子,因为我在您的代码中发现了另一个错误
    【解决方案3】:
    th:object="${com.Basi.CheBBellaEmittente.Pages.Model.Utente}"
    

    它应该指向您在视图模型中传递的实际对象 instance,而不是它的类,所以可能

    th:object="${utente}"

    应该是这样的。

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 2014-11-02
      • 2017-03-08
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多