Problem mit Thymeleaf

DKK007

PCGH-Community-Veteran(in)
Ich hab ein Problem mit Thymeleaf.

Ich möchte in die Länderliste (s.u.) das Select-Tag also selected="selected" einfügen, wenn ${country} == ${originOld} erfüllt ist.

HTML:
<select name="origin" >
                                            <option >---- Select ----</option>
                                            <option th:each="country : ${countrys}"
                                                    th:text="${country}"
                                                    >
                                            </option>
                                        </select>

So hab ich es versucht, das läuft aber nicht:

HTML:
<select name="origin" >
                                            <option >---- Select ----</option>
                                            <option th:each="country : ${countrys}"
                                            th:if="{"${country} == ${originOld}" selected="selected" }"
                                            th:text="${country}"
                                                    >
                                            </option>
                                        </select>
 
Komisches Gewerks diese Engine. Aber ich würde es so versuchen:
HTML:
<select name="origin" >
                                            <option >---- Select ----</option>
                                            <option th:each="country : ${countrys}"
                                            th:selected="(${country} == ${originOld}) ?  'selected'  : ' '"
                                            th:text="${country}"
                                                    >
                                            </option>
                                        </select>
Denn wenn ich die Doku richtig verstanden habe, soll die th:if Anweisung nur bei korrekter Bedingung das Tag anzeigen, ansonsten nicht. Es dürfte also theoretisch nur eine oder keine Option stehen, da theoretisch nur eine Option wahr sein kann (es sei dennin deiner Liste ist zweimal die gleiche drin).

EDIT Spricht: Hätte mal weiterlesen sollen. So müsste es funktionieren:
HTML:
<select name="origin" >
                                            <option >---- Select ----</option>
                                            <option th:each="country : ${countrys}"
                                            th:attr="(${country} == ${originOld}) ?  selected='selected'  : ''}"
                                            th:text="${country}"
                                                    >
                                            </option>
                                        </select>
Denn laut Doku steht selected zur direkten Ansprache nicht zur Verfügung: Tutorial: Tutorial: Using Thymeleaf

Sorry! :redface:
 
Zuletzt bearbeitet:
Nur das selected Atribut soll nur manchmal angezeigt werden. country soll immer angezeigt werden.
 
So geht es auch. Habe aber eben in der Doku noch folgendes gefunden:
HTML:
<select name="origin" >
    <option >---- Select ----</option> 
    <option th:each="country : ${countrys}"
        th:selected="(${country} == ${originOld}) ? true  : false }"
        th:text="${country}"                                                     >
    </option>                                         
</select>
Die Doku wollte ja unbedingt in einem eigenen Abschnitt erwähnen, das Attribute wie selected mit booleans gefüttert werden können. Deswegen dachte ich, das man das selected-Attribut nicht nutzen kann. Wenn mein schlechtes English gereicht hat, soll laut Doku selected als Attribut bei false garnicht erst auftauchen.
 
Aus irgendeinem Grund kann Spring das ganze nicht parsen: org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "(${country} == ${originOld}) ? true : false }" (new_user:149)

Hab das jetzt so gelöst:

HTML:
<select name="origin" >
                                            <option >---- Select ----</option>
                                            <option th:each="country : ${countrys}"
                                                    th:if="${country} == ${originOld}" selected="selected" 
                                                    th:text="${country}"
                                                    >
                                            </option>
                                            <option th:each="country : ${countrys}"
                                                    th:text="${country}"
                                                    >
                                        </option>                     
                                    </select>

Da wird dann gleich das zuletzt gewählte Land ganz oben angezeigt.
Trotzdem vielen Dank. ;)
 
Zurück