Я создаю простой веб-сервис с пружиной и тимелистом. Вот код на данный момент: Контроллер:
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)
Итак, что я могу сделать, чтобы справиться с этой ситуацией? Я не знаю, что в этом плохого, это очень простой код. Вы можете дать мне совет? Я предполагаю, что это проблема с некоторыми пакетами, но я не могу понять, что именно.




Поскольку ваш атрибут модели называется 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() - что не имеет смысла.
Не совсем уверен, что мне делать с этим ..? есть ответ на ваш первоначальный вопрос?
В вашем контроллере вы устанавливаете имя атрибута вашей модели на 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 вы пишете код для принятия формы.
Я отредактировал свой пост, потому что обнаружил в вашем коде очередную ошибку
th:object = "${com.Basi.CheBBellaEmittente.Pages.Model.Utente}"
он должен указывать на фактический объект пример, который вы передаете в своей модели представления, а не на его класс, поэтому, вероятно,
th: object = "$ {utente}"
это то, что должно быть.
Спасибо, но теперь метод post выдает ошибку: Ошибка при выполнении процессора org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagP rocessor '(шаблон: "nuovo-utente" - строка 10, столбец 32)