Spring / MVC Thymeleaf th: ausgewählt funktioniert nicht

Ich erstelle eine Anwendung mit Spring, Hibernate und natürlich Thymeleaf für die Ansichten. Die Anwendung konzentriert sich auf eine Aktivitätsdomänenklasse (die buchstäblich eine von einem Clubmitglied organisierte In- oder Outdoor-Aktivität ist). Die Klasse verfügt über mehrere Suchfelder (Kategoriebereich), die als Domänenklassen modelliert sind, die von Hibernate auf Datenbanksuchtabellen abgebildet werden.

uf der Seite "Ansicht bearbeiten" wird ein Dropdown-Feld angezeigt, in dem Sie einen Suchwert auswählen können. Außerdem muss der aktuelle Wert unter Verwendung des ausgewählten Attributs angezeigt werden. Hier geht es schief. Das select-Attribut wird nie generiert, obwohl der boolesche Ausdruck korrekt zu sein scheint.

The th: attr wird hinzugefügt, um die Werte der verglichenen Ausdrücke anzuzeigen, nämlich $ {choice.id} und * {category.id}. Diese Werte sind korrekt. Ich habe das schreibgeschützte Attribut hinzugefügt (nicht für ein ausgewähltes Element geeignet, sondern nur, um zu prüfen, ob es ein Problem mit dem ausgewählten Attribut sein könnte) und wir sehen in der Ausgabe, dass dieses Attribut in der Ausgabe generiert wird!

<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-Ausgabe:

<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>

So läuft meine Suche auf: Warum ist selected = "ausgewählt"

nicht für Optionselement mit ID = 2 generiert?

Natürlich kann dies durch Generieren von is mit einem th: attr-Ausdruck erreicht werden, aber gemäß der Dokumentation sollte es nur so funktionieren.

Auch ich habe versucht, die Verwendung des speziellen Attributs th: selected zu umgehen und mit th: attr das ausgewählte Attribut für die ausgewählte Option zu generieren (der Wert 'none' wird aus Gründen der Übersichtlichkeit vorübergehend verwendet):

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

Again, es wird nichts angezeigt und es wird kein ausgewähltes Attribut gerendert. Ich habe versucht, es mit einem benutzerdefinierten Attributnamen zu wiederholen (die niederländische Übersetzung des ausgewählten Wortes ist Thymeleaf natürlich unbekannt):

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

Und jetzt ist es gerendert! Siehe die Ausgabe unten:

<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>

Ich bin jetzt wirklich verloren, das ausgewählte Attribut ist vollkommen legal und die einzige Wahl hier, aber es scheint, dass Thymeleaf es ignoriert. Wie kann man das lösen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage