Как установить выбранную опцию в Thymleaf и Spring - PullRequest
0 голосов
/ 20 октября 2018

У меня возникают проблемы, когда я выбираю вариант из выпадающего списка, я получаю необходимую информацию, но выбранный вариант не остается выбранным.Есть идеи?

 <form   th:action="@{/values/fiatCurrency} "method="post">
                                <select     name="fiatCurrency" onchange="this.form.submit()">
                                <option id="USD"    onclick="document.getElementById(this).selected = true"  value="USD"  th:text="USD"> </option>
                                <option id="EUR"    onclick="document.getElementById(this).selected = true" value="EUR" th:text="EUR"> </option>
                                <option id="CNY"     onclick="alert( 'a ') " value="CNY"  th:text="CNY"> </option>
                                </select>
                               </form>

Это класс Controller:

@Controller
public class DataController {

  private  ApiService apiService;

public DataController(ApiService apiService) {
    this.apiService = apiService;
}

@GetMapping(value = {"/values","/values/","", "/", "/index","/cryptos"} )
public String index(Model model){

    model.addAttribute("cryptos",apiService.getCrypto(100));

    return "index";
}

@PostMapping(value = "/values/fiatCurrency")
public String choseCurrency(Model model,
                            @RequestBody  String fiatCurrency) {
    String replace=fiatCurrency.replace("fiatCurrency=","");
    model.addAttribute("cryptos", apiService.getInDifferentValues(fiatCurrency));
    return "index";
}}

Всегда возвращает значение USD.

1 Ответ

0 голосов
/ 20 октября 2018

Вы отправляете вашу fiatCurrency в качестве параметра запроса, а не тела запроса.Spring имеет мощный механизм для отображения формы представления на реальный объект.Этот объект будет отправлен как @ModelAttribute и будет добавлен в модель до загрузки представления.

Ваша форма будет:

<form th:action="@{/values/fiatCurrency}" th:object="${fiat}" method="post">
    <select th:field="*{fiatCurrency}" onchange="this.form.submit()">
        <option id="USD" th:value="USD" th:text="USD"></option>
        <option id="EUR" th:value="EUR" th:text="EUR"></option>
        <option id="CNY" th:value="CNY" th:text="CNY"></option>
    </select>
</form>

Следующим шагом будет создание классаFiat, чтобы обернуть нужные данные:

public class Fiat {

    private String fiatCurrency;

    //getters and setters
}

Объект Fiat должен быть добавлен в модель, прежде чем будет предоставлен вид.Простое и элегантное решение - определить новый метод в вашем контроллере:

@ModelAttribute
public void addModelAttribute(Map<String, Object> model) {
    model.put("fiat", new Fiat());
}

Ваш метод записи получит вновь созданный объект:

@PostMapping(value = "/values/fiatCurrency")
public String choseCurrency(Model model,
                            @ModelAttribute Fiat fiat) {
    //..
    return "index";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...