У меня есть объект клиента, к полям которого я пытаюсь получить доступ в моем представлении с помощью Thymeleaf. Я использовал обычный синтаксис, т. Е.
<p th:text="${customer.name}"></p>
однако, это не работает, это работает, когда я использую метод get (), т.е.:
<p th:text="${customer.get.name}"></p>
Есть идеи, почему это происходит? Я только начинаю с Thymeleaf, поэтому заранее прошу прощения, если это глупый вопрос.
Вот моя модель:
@Id
@GeneratedValue
private int id;
@NotNull
@Size(min = 2, message="Company name length must be at least 1 character long.")
private String name;
public Customer() {}
public Customer(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
и контроллер:
@RequestMapping("")
public String index(Model model) {
model.addAttribute("title", "Home");
model.addAttribute("customers", customerDao.findAllByOrderByNameAsc());
return "index";
}
@RequestMapping(value = "", method = RequestMethod.POST)
public String processFetch(@ModelAttribute Customer customer, Model model) {
model.addAttribute("title", "Home");
model.addAttribute("customers", customerDao.findAllByOrderByNameAsc());
model.addAttribute("c", customerDao.findById(customer.getId()));
return "index";
}
и просмотр:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org/">
<head th:replace="fragments::head"></head>
<body>
<nav th:replace="fragments::nav"></nav>
<div class="container">
<h1 class="title" th:text="${title}"></h1>
</div>
<div style="text-align: center">
<form method="post" th:object="${customers}" style="display: block;margin: 0 auto;width:300px;margin-top:5%">
<select class="form-control" name="customer">
<option style="text-align:center" th:each="customer:${customers}" th:value="${customer.id}" th:text="${customer.name}"></option>
</select>
<input class="button" style="display:block;margin:0 auto;margin-top:30px" type="submit" value="Fetch" />
</form>
</div>
<div>
<h1 th:text="${c.get().name}"></h1>
</div>
</body>
</html>
Вот мой класс репозитория:
public interface CustomerDao extends CrudRepository<Customer, Integer> {
public Iterable<Customer> findAllByOrderByNameAsc();
}
Ошибка при попытке отправить форму:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'name' cannot be found on null
Я не уверен, почему он не может найти свойство 'name'. Он должен быть частью объекта.
Я ценю любое понимание этого!