Проблемы Spring тимелеафа: шаблон обработки исключений

Я создаю простой веб-сервис с пружиной и тимелистом. Вот код на данный момент: Контроллер:

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)

Итак, что я могу сделать, чтобы справиться с этой ситуацией? Я не знаю, что в этом плохого, это очень простой код. Вы можете дать мне совет? Я предполагаю, что это проблема с некоторыми пакетами, но я не могу понять, что именно.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 448
3

Ответы 3

Поскольку ваш атрибут модели называется nuovoUtente - model.addAttribute("nuovoUtente", new Utente());, это то, что вы должны использовать в качестве вашего th: объекта.

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

Выражение вроде этого: ${com.Basi.CheBBellaEmittente.Pages.Model.Utente} будет интерпретироваться как: com.getBasi().getCheBBellaEmittente().getPages().getModel().getUtente() - что не имеет смысла.

Спасибо, но теперь метод post выдает ошибку: Ошибка при выполнении процессора org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagP‌ rocessor '(шаблон: "nuovo-utente" - строка 10, столбец 32)

Pikappa 21.09.2018 19:07

Не совсем уверен, что мне делать с этим ..? есть ответ на ваш первоначальный вопрос?

Metroids 21.09.2018 21:07

В вашем контроллере вы устанавливаете имя атрибута вашей модели на 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-utente.html вы пишете код для принятия формы.

Я отредактировал свой пост, потому что обнаружил в вашем коде очередную ошибку

Jane C. 22.09.2018 22:01
th:object = "${com.Basi.CheBBellaEmittente.Pages.Model.Utente}"

он должен указывать на фактический объект пример, который вы передаете в своей модели представления, а не на его класс, поэтому, вероятно,

th: object = "$ {utente}"

это то, что должно быть.

Другие вопросы по теме