Spring Thymeleaf th: выбран в EnumList с множественным выбором - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть это перечисление

enum Types{
  A, B
}

У меня есть форма класса

public class MyForm {
   private Types[] types;
   //getter setters
}

вот моя форма с выбором

<form th:action="${#httpServletRequest.requestURI}" th:object="${myForm}" method="POST" id="form">

<select name="types" multiple="" id="testSelect"
  th:each="type : ${T(com.test.Types).values()}"
  th:value="${type}" 
  th:text="${type}"
  th:selected="*{types != null AND #arrays.contains(types, type)}"
  >
</select>

</form>

вот ошибка, которую я получаю.

 Property or field 'type' cannot be found on object of type 'com.test.MyForm' - maybe not public or not valid?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Лучше всего было бы изменить компонент поддержки формы, чтобы иметь некоторую коллекцию перечислений вместо массива, такого как:

public class MyForm {
  private List<Types> types = new ArrayList<Types>();
  //getter setters
}

Затем, перед тем как визуализировать форму, вы можете просто заполнить этот массив типами, которые вы хотите предварительно выбрать в контроллере, просто добавив их в список.

Тогда должна быть возможность просто пропустить th: выбранная логика ...

<select th:field="*{types}" multiple="multiple" id="testSelect">
    <option th:each="type : ${T(com.test.Types).values()}"
       th:value="${type}" th:text="${type}">
    </option>
</select>

Thymeleaf сделает магию для вас; -)

0 голосов
/ 12 ноября 2018

Во-первых, я считаю, что у вас есть опечатка, она должна быть type !=, а не печатать !=.Кроме того, вы используете * в выбранном вами, вместо $.Кроме того, я считаю, что вы используете #list.contains() Thymeleaf таким образом, что это не должно работать.Вы должны использовать всю функцию, как это #list.contains(types, type).И последнее: теги selected, value и text должны идти в элементе option, а не select.В конце ваш код должен выглядеть следующим образом.

<select name="types" multiple="" id="testSelect">
    <option th:each="type : ${T(com.test.Types).values()}"
         th:value="${type}" th:text="${type}"
         th:selected="${types != null AND #arrays.contains(types, type)}">
    </option>
</select>

И последнее, я не уверен, откуда взялась переменная types, я предполагаю, что вы где-то ее инициализировали.

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