Themeleaf и отправить форму POST - PullRequest
0 голосов
/ 12 марта 2020

Mavens,

Я пытаюсь вызвать контроллер из Themeleaf.

Мой код темы письма выглядит так:

<form action="#" th:action="@{/order}" modelAttribute="order" th:object="${order}"  method="POST">
                <div class="div">
                        <h5>Amount</h5>
                        <input type="text" class="input" th:field="*{amountValue}">
                    </div>

                <input type="submit" class="btn" value="Process Payment">
            </form>

Мой код контроллера:

@RequestMapping(value = "/order", method = RequestMethod.POST)
    public  ModelAndView processOrder(@ModelAttribute Order order) {
        ModelAndView modelAndView = new ModelAndView();
        String accessToken = token();
        String paymentURL = null;
        if (accessToken != null) {
            paymentURL = placeOrder(accessToken, order);
            if (paymentURL != null) {
                modelAndView.addObject("orderReferenceNumber", paymentURL.substring(paymentURL.indexOf("=") + 1));
                modelAndView.addObject("paymentURL", paymentURL + "&slim=true");
                modelAndView.setViewName("paymentProcess");
                return modelAndView;
            }
        }
        return modelAndView;

    }

Мой метод Get:

@RequestMapping(value = "/index", method = RequestMethod.POST)
    public ModelAndView doLogin(@RequestParam(value = "username", required = true) String username,
            @RequestParam(value = "password", required = true) String password) {
         ModelAndView modelAndView = new ModelAndView();
        if (username != null && password != null) {
            if (username.equalsIgnoreCase("one") && password.equalsIgnoreCase("one")) {
                 modelAndView.addObject("order", new Order());
                 modelAndView.setViewName("index"); 
                 return modelAndView;
            }
        }
         modelAndView.setViewName("welcome"); 
         return modelAndView;
    }

Ошибка при нажатии кнопки

Error resolving template [order], template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [order], template might not exist or might not be accessible by any of the configured Template Resolvers

Что я делаю не так?

1 Ответ

1 голос
/ 12 марта 2020

Проблема связана с тем, как вы заполняете свой экземпляр ModelAndView. Только когда ваши два предложения if совпадают, вы задаете имя представления с помощью modelAndView.setViewName("paymentProcess");. Это означает, что для некоторых исполнений (не соответствующих вашим обоим условиям) вы вообще не задаете имя представления, и Spring MVC не знает, какое представление следует отобразить и вернуть пользователю.

Чтобы исправить это, убедитесь, что вы всегда устанавливаете представление по умолчанию / fallabck для возврата в случае, если оба условия if не true. Ваш код может переопределить это имя представления, но у вас есть, по крайней мере, для каждого случая представление для отката:

@RequestMapping(value = "/order", method = RequestMethod.POST)
public  ModelAndView processOrder(@ModelAttribute Order order) {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("yourDefaultViewName"); // this is the important line
    String accessToken = token();
    String paymentURL = null;
    if (accessToken != null) {
        paymentURL = placeOrder(accessToken, order);
        if (paymentURL != null) {
            modelAndView.addObject("orderReferenceNumber", paymentURL.substring(paymentURL.indexOf("=") + 1));
            modelAndView.addObject("paymentURL", paymentURL + "&slim=true");
            modelAndView.setViewName("paymentProcess");
            return modelAndView;
        }
    }
    return modelAndView;

}
...