Отправка формы Thymeleaf: операция CRUD UPDATE не работает правильно. Нет ошибок - PullRequest
0 голосов
/ 01 мая 2018

Создание проекта Spring Boot + JPA + Thymeleaf. Это просто для учебной цели. Я хочу создать компанию и обновить ее.

Не удалось решить проблему CRUD.

Операция Crud «создать» работает правильно, а «обновление» - нет, просто снова создается новая. Пожалуйста, помогите.

Моя компанияКонтроллер

package ua.com.mmplus.promomanagement.controller;

import org.slf4j.Logger;

@Controller
public class CompanyController {

    @Autowired
    private CompanyService companyService;

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping(value = "/company/add", method = RequestMethod.GET)
    public String companyForm(Model model){
        model.addAttribute("company", new Company());
        return "companyform";
    }

    @RequestMapping(path = "companylist", method = RequestMethod.POST)
    public String companySubmit(Company company){

        String info = String.format("Company submission: id = %d, company = %s" +
                        ", email = %s", company.getId(), company.getCompanyName(),
                company.getCompanyEmail());
        logger.info(info);
        
        companyService.save(company);

        return "redirect:/";
    }
    
    @GetMapping("/companylist")
    public String getCompanyList(Model model) {
    	model.addAttribute("companies", companyService.getAll());
    	return "companylist";
    }
    
    @GetMapping("company/edit/{id}")
    public String updateCompany(@PathVariable(name = "id") Long id, Model model) {
    	model.addAttribute("company", companyService.findById(id));
    	return "companyform";
    }
}

Моя компанияform.html

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" media="all"
          href="../../css/gtvg.css" th:href="@{/css/gtvg.css}" />
</head>

<body>
    <h1>Company Form</h1>
        <form action="#" th:action="@{/companylist}" th:object="${company}" method="post">
            <p>New Company Name: <input type="text" th:field="*{companyName}" /></p>
            <p>email: <input type="text" th:field="*{companyEmail}" /></p>
            <p><input type="submit" value="SUBMIT"/><input type="reset" value="RESET"/></p>
        </form>
        <a href="home">У головне меню</a>
</body>

</html>

1 Ответ

0 голосов
/ 03 мая 2018

Проблема решена! Чтобы передать идентификатор, я должен добавить в companyform.html эту строку:

**<input type="hidden" th:field="*{id}"/>**

Так должно выглядеть так:

<form class="form horizontal" th:action="@{/eventform}" th:object="${event}" method="post">
        <table>
        
        <input type="hidden" th:field="*{id}"/>
        
            <select class="form-control" th:field="*{promo}">

                <option th:each="promo: ${promoList}"
                        th:value="${promo.getId()}"
                        th:utext="${promo.getPromoName().toString()}"
                ></option>

            </select>

            <select class="form-control" th:field="*{company}">
                <option th:each="companyList : ${companies}"
                        th:value="${{companyList.getId()}}"
                        th:utext="${companyList.getCompanyName().toString()}"></option>
            </select>

            <select class="form-control" th:field="*{supermarket}">
                <p>Вибір постачальника</p>
                <option th:each="supermarket : ${supermarketList}"
                        th:value="${supermarket.getId()}"
                        th:utext="${supermarket.getSupermarketName().toString()}">
                </option>

            </select>

            <p>Опис події: <input type="text" th:field="*{description}"/> </p>

        </table>
        <p><input type="submit" value="Додати подію"></p>
        <a href="/">У головне меню</a>
    </form>
...