Как заполнить выпадающий список HashMap, содержащимся в объекте, в Thymeleaf? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть объект, содержащий HashMap и некоторые другие переменные.Это класс, определяющий его:

public class Student {
    private String firstName;
    private String lastName;
    private String country; 

    public HashMap<String,String> countryOptions;

    public Student()
    {
        // populate country options: used ISO country code
        countryOptions = new HashMap<String, String>() {};

        countryOptions.put("BR", "Brazil");
        countryOptions.put("FR", "France");
        countryOptions.put("DE", "Germany");
        countryOptions.put("IN", "India"); 
    }

        // getters and setters...  
}

Я хочу отправить этот объект в форму в качестве модели, связать данные из этой формы с этим объектом и затем отобразить их на странице подтверждения.К сожалению, у меня проблема с заполнением раскрывающегося списка записями из HashMap.

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

@Controller
@RequestMapping("/student")
public class StudentController {

    @RequestMapping("/showForm")
    public String showForm(Model theModel)
    {
        Student theStudent = new Student();     

        theModel.addAttribute("student", theStudent);
        theModel.addAttribute("country", theStudent.countryOptions);

        return "student-form";
    }

    @RequestMapping("/save")
    public String save(@ModelAttribute("student") Student theStudent)
    {
        return "student-confirmation";
    }
}

student-form.html:

<body>
    <form th:action="@{save}" th:object="${student}" method="post">
        <input type="text" name="firstName" th:field="${student.firstName}"/>
        <input type="text" name="lastName" th:field="${student.lastName}"/>

        <select name="country" th:field="${student.country}">
            <option th:each="country : ${student.countryOptions}" th:value="${student.countryOptions}" th:text="${student.countryOptions}"></option>
        </select>

        <input type="submit"/>
    </form>              
</body>

Мой результат выглядит следующим образом my result

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

1 Ответ

0 голосов
/ 14 февраля 2019

Значения и текстовые атрибуты должны ссылаться на country, иначе тимилиф напечатает countryOptions.toString()

<option th:each="country : ${student.countryOptions.entrySet()}"
        th:value="${country.key}"
        th:text="${country.value}">
</option>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...