Доступ к объекту в представлении с Thymeleaf - PullRequest
0 голосов
/ 08 мая 2018

У меня есть объект клиента, к полям которого я пытаюсь получить доступ в моем представлении с помощью 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'. Он должен быть частью объекта.

Я ценю любое понимание этого!

...