Обработка значения enumm(select) в форме на Java
Помогите разобраться, всю голову уже сломал: делают веб-магазин, нужно сделать метод изменения статуса заказа. Идет работа с бд postgres. Делаю метод, отправляющий SQL-запрос со вставкой значений из формы (из списка).
Сам список, перечисляющий значения enum, выводится, но не пойму, как обработать его в контроллере, чтобы получить значение из формы, передать в метод отправляющий запрос в базу.
Код репозитория:
@Modifying
@Query("UPDATE Order order SET order.status = ?1 WHERE order.id = ?2")
int updateOrderStatus(int status, int id);
Код сервисного класса:
@Transactional
public void updateOrderStatus(int status, int id){
orderRepository.updateOrderStatus(status, id);
}
Код контроллера:
@PostMapping("/admin/orders/change_status/{id}")
public String updateOrderStatus(@Valid Status status, @PathVariable("id") int id, Model model){
model.addAttribute("status", status);
orderService.updateOrderStatus(status.ordinal(), id);
return "redirect:/order";
}
Код HTML:
<form method="post" th:action="@{/admin/orders/change_status/{id}(id=${order.getId()})}" th:object="${status}">
<label for="status">Выберите статус: </label>
<select id="status">
<option th:each="enumm : ${T(com.smaglyuk.handmadeshop.enumm.Status).values()}"
th:text="${enumm}"
th:value = "${enumm}">
</option>
</select>
<input type="submit" value="Изменить статус">
</form>
Текст ошибки:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Apr 11 00:42:09 MSK 2023
There was an unexpected error (type=Internal Server Error, status=500).
Cannot invoke "com.smaglyuk.handmadeshop.enumm.Status.ordinal()" because "status" is null
java.lang.NullPointerException: Cannot invoke "com.smaglyuk.handmadeshop.enumm.Status.ordinal()" because "status" is null
at com.smaglyuk.handmadeshop.controllers.AdminController.updateOrderStatus(AdminController.java:204)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:578)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
...
Источник: Stack Overflow на русском