2015-08-25 2 views
1

Я создаю приложение, используя Spring, Hibernate и, конечно, Thymeleaf для просмотров. Приложение сосредоточено вокруг класса домена деятельности (который является буквально активным или открытым мероприятием, организованным членом клуба). Класс имеет несколько полей поиска (область категорий), которые моделируются как классы домена, отображаемые Hibernate в таблицы поиска базы данных.Spring/MVC Thymeleaf th: selected not working

На странице «Редактировать вид» Я показываю раскрывающийся список, чтобы иметь возможность выбирать значение поиска, а также текущее значение должно отображаться с использованием выбранного атрибута. Здесь все идет не так. Атрибут select никогда не генерируется, хотя логическое выражение кажется правильным.

Добавлен th: attr, чтобы показать значения сравниваемых выражений, а именно $ {choice.id} и * {category.id}. Эти значения верны. Я добавил атрибут readonly (не подходит для элемента select, но просто для того, чтобы понять, может ли это быть проблемой атрибута th: selected), и мы видим на выходе, что этот атрибут IS генерируется на выходе!

<label>Categorie</label> 
<select th:field="*{category}"> 
    <option th:each="choice : ${allCategories}" 
      th:value="${choice.id}" 
     th:attr="choiceid=${choice.id}, categoryid=*{category.id}, showselected=(${choice.id} == *{category.id})" 
     th:selected="(${choice.id} == *{category.id})" 
     th:readonly="(${choice.id} == *{category.id})" 
     th:text="${choice.description}"></option> 
</select> 

HTML выход:

<label>Categorie</label> 
<select id="category" name="category"> 
    <option choiceid="1" categoryid="2" showselected="false" value="1">Actief en sportief</option> 
    <option choiceid="2" categoryid="2" showselected="true" readonly="readonly" value="2">Uitgaan en nachtleven</option> 
    <option choiceid="3" categoryid="2" showselected="false" value="3">Kunst en cultuur</option> 
    <option choiceid="4" categoryid="2" showselected="false" value="4">Eten en drinken</option> 
    <option choiceid="5" categoryid="2" showselected="false" value="5">Ontspanning en gezelligheid</option> 
</select> 

Так что мой квестинг сводится к тому: почему выбран = "выбрано"

не генерируется для опции элемента с идентификатором = 2?

Конечно, это может быть достигнуто путем генерации с выражением th: attr, но в соответствии с документацией он должен работать именно так.

Также я попытался обойти использование специального й: выбранный атрибут и использовать й: ATTR генерировать выбранный атрибут для выбранного параметра (значение «None» временно используемый для ясности '):

th: attr = "selected = ($ {choice.id} == * {category.id})? 'selected': 'none'"

Опять же, ничего не отображается, и выделенный атрибут не отображается. Я попытался повторить с именем пользовательского атрибута (голландский перевод выбранного слова, конечно неизвестный Тимелеафу):

th: attr = "geselecteerd = ($ {choice.id} == * {category. id})? 'selected': 'none' "

И теперь это визуализируется! Смотрите ниже вывод:

<select id="category" name="category"> 
    <option geselecteerd="none" value="1">Actief en sportief</option> 
    <option geselecteerd="selected" value="2">Uitgaan en nachtleven</option> 
    <option geselecteerd="none" value="3">Kunst en cultuur</option> 
    <option geselecteerd="none" value="4">Eten en drinken</option> 
    <option geselecteerd="none" value="5">Ontspanning en gezelligheid</option> 
</select> 

Я действительно потерял сейчас, выбранный атрибут является вполне законным и единственным выбором здесь, но оказывается, что Thymeleaf игнорирует его. Как это решить?

ответ

1

по thymeleaf форуме (post) th:field не работает с th:selected

попробовать что-то вроде этого (не проверено)

<select name="category"> 
    <option th:each="choice : ${allCategories}" 
    th:value="${choice.id}" 
    th:attr="choiceid=${choice.id}, categoryid=*{category.id}, showselected=(${choice.id} == *{category.id})" 
    th:selected="(${choice.id} == *{category.id})" 
    th:readonly="(${choice.id} == *{category.id})" 
    th:text="${choice.description}"></option> 
</select> 
+0

Как это решить проблему? –

0

'-й: поле' автоматически генерирует «идентификатор 'и' name ', поэтому, если вы хотите использовать «th: selected», вы должны удалить «th: field» и вручную настроить их для работы.

У меня была такая же проблема, и проверить форум, «-й: выбранный» и «-е: поле» не работает одновременно. check the forum

<div class="row"> 
<div class="input-field col s12"> 
    <select id="doc" name="doc" th:with="doc=*{doc}"> 
        <option value="" th:disabled="disabled" selected="true" 
         th:text="${status==true}? 'Seleccione tipo de documento' : ${doc}">Seleccione 
         tipo de documento</option> 
        <option th:each="tipoDoc : ${tipoDocs}" th:text="${tipoDoc}" 
         th:value="${tipoDoc}" /> 
       </select> 
    <label>Documento</label> 
</div> 

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