2016-11-07 3 views
1

Я использую Thymeleaf для одного из моих проектов java. Теперь, чего я пытаюсь достичь, это когда я выбираю что-то другое из раскрывающегося списка, а не значение по умолчанию, которое является «ALL», а затем нажмите кнопку отправки [POST], чтобы получить информацию о выбранном элементе. Я бы хотел, чтобы это отобразило отображение элементов в раскрывающемся списке после отправки. И что он теперь делает, он возвращается к значению по умолчанию. Если я добавлю выбранный код ниже выбранного атрибута, он выберет все элементы из списка, что также неприемлемо, так как оно всегда отображает последний элемент списка.Thymeleaf выпадающий список

<div class="controls"> 
    <select class="form-control" name="example" id="example"> 
     <option value="0">ALL</option> 
     <option th:each="user : ${allUsers}" 
       th:value="${user.id}" 
       th:text="${user.name}"> 
     </option> 
    </select> 

мой контроллер, чтобы получить список, я держал его как можно более простым:

@ModelAttribute("allUsers") 
public List<User> allUsers() { 
    List<User> userList= repo.findAll(); 
    return userList; 
} 

я также хотел бы отметить, что мой объект:

<form class="form-search" action="#" 
        th:action="@{/combinedsearch}" 
        th:object="${combinedreport}" method="post"> 

Так что идея использовать что-то вроде этого не работает

<select th:field="*{user}">, так как у моего объекта фактически нет пользователя как поля.

Любые идеи? Помогите?

+0

В чем проблема с добавлением пользовательского поля в класс CombinedReport? Сопоставлена ​​ли информация об объекте объекта? –

+0

Я разместил свое собственное решение для моей собственной проблемы ниже. так что это уже не проблема. –

ответ

2

Хорошо, поэтому решение для моей проблемы очень простое. Проводя его здесь, поэтому, если вы столкнулись с подобной проблемой, вы всегда можете обратиться к моему ответу.

В основном, что я сделал в контроллере объединенного контроллера, я извлек этот user_ID, который я получаю после отправки формы HTML, затем я использовал его для всего, что мне нужно сделать в конце, а затем отправлю этот user_id обратно передний конец, просто добавив его в модель в качестве атрибута: model.addAttribute("lastselected", userId);

Затем я создал пользовательский логический метод в объекте пользователя:

public boolean isSelected(Integer userId){ if (userId != null) { return userId.equals(id); } return false; }

, а затем я изменил мой код в моем thymeleaf шаблон для:

<select class="form-control" name="example" id="example"> 
    <option value="0">ALL</option> 
    <option th:each="user : ${allUsers}" 
      th:value="${user.id}" 
      th:selected="${user.isSelected(lastselected)}" 
      th:text="${user.name}"> 
    </option> 
</select> 

и baaaam! Отлично работает !

+0

У меня также была форма с полем 'select', а тимелеаф меняет атрибут name, если я использую' th: field', который на моем конце выдает ошибку. Поэтому я использовал что-то похожее на ваше решение как работу, так что у меня есть желаемый атрибут 'name', чем тот, который был назначен тимелеафом из имени объекта. – jacobcs

Смежные вопросы