Как передать содержимое innerHTML в поле th: field в тимелии? - PullRequest
0 голосов
/ 27 марта 2019

Я создаю веб-сайт Spring Boot для электронной коммерции, и у меня есть тег span, содержащий общую стоимость, указанную в корзине, и я обновляю его с помощью JavaScript:

<form method="POST" th:object="${chargeRequest}">
    <span class="total">
        Total: <span class="total-price">$0</span>
    </span>
</form>

и я передаю атрибут модели model.addAttribute("chargeRequest", new ChargeRequest()); на эту страницу, а класс ChargeRequest определяется как:

public class ChargeRequest {
    private int amount;

    // constructor, setter/getter
    // ...
}

Вопрос в том, как обновить amount в chargeRequest и передать его обратно в контроллер с помощью Thymeleaf?

th:field действителен только для <input>, <select>, <textarea>, я не могу напрямую поместить его в <span> tag

Я пытался передать 2 атрибута:

model.addAttribute("amount", new String("$0"));
model.addAttribute("chargeRequest", new ChargeRequest());
<span class="total">
    Total: <span class="total-price" th:text="${amount}">$0</span>
    <input type="hidden" th:value="${amount}, id="amount", name="amount">
</span>

Но я не знаю, как обновить ${amount}, чтобы amount в chargeReqeust можно было обновлять автоматически?

1 Ответ

0 голосов
/ 27 марта 2019

К сожалению для вас, вы не сможете сделать это с простым контроллером.Вам понадобится @ControllerAdvice, который будет служить глобальным контроллером, чтобы иметь возможность обновлять корзину всякий раз, когда кто-то добавляет продукт в свою корзину или удаляет продукты из своей корзины.

Другими словами, вам нужен ГЛОБАЛЬНЫЙ КОНТРОЛЛЕР .Этот глобальный контроллер должен проверить атрибут SESSION , чтобы позволить вам изменять общую сумму корзины и обновлять ее каждый раз, когда происходит изменение.Например, проверьте это ниже.

@ControllerAdvice
public class GlobalCartController{
    @Autowired
    private HttpSession session;
    @ModelAttribute("cartModel")
    public CartModel getCartTotal(){
        if(session.getAttribute("cart")==null){
           //Here you create cart attribute for the session 
           // then
           session.setAttribute("cartModel", cartObjectWithUpdatedTotal);
     }
     return (CartObjectWithUpdatedTotal) session.getAttribute("cartModel");

}

Обратите внимание, что глобальный контроллер всегда будет проверяться всегда на всех маршрутах и ​​не требует маршрутизации, это позволяет вамиспользуйте класс автоматической проводки HttpSession, который позволяет

идентифицировать пользователя по более чем одной странице запроса или посетить веб-сайт и хранить информацию об этом пользователе.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...