2014-10-20 7 views
6

Ich versuche, die Sammlung mit Thymeleaf zu filtern, indem Sie dem Beispiel in der folgenden URL folgen. "Projektion & Auswahl auf Sammlung" Abschnitt. http://doanduyhai.wordpress.com/2012/04/14/spring-mvc-part-iv-thymeleaf-advanced-usage/So filtern Sie eine Sammlung in thymeleaf th: jeweils mit einer anderen Eigenschaft im Vergleich

<tr th:each="artist,rowStat : ${listArtits.?[alive == true]}"> 
... 
</tr> 

Jedoch habe ich eine andere Eigenschaft möchte anstelle von festen Wert verwenden (true/false). Zum Beispiel:

<tr th:each="artist,rowStat : ${listArtits.?[played > playedCountReq]}"> 
... 
</tr> 

wo als playedCountReq ist eine andere Form Variable für Thymeleaf verfügbar. Ich erhalte den folgenden Fehler. Eigenschaft oder Feld 'playedCountReq' kann nicht am Objekt vom Typ gefunden werden ...

Ich habe mehrere Möglichkeiten ausprobiert, aber keinen Erfolg. Irgendwelche Vorschläge?

+0

Die einzige Arbeit, die ich bis jetzt gefunden habe, ist th: block. Bewegen Sie den th: jedes in th: Block und th: wenn in der tr-Tag – gmansoor

+0

geben Sie bitte den Code für Ihre ganze Form/Tabelle auf diese Weise können wir das ganze Bild – Aeseir

Antwort

5

I succeded :) Hier Lösung ist:

in Controller:

(...) 
Person p1 = new Person(); 
p1.setAge(20); 
Person p2 = new Person(); 
p2.setAge(30); 
List<Person> list = Lists.newArrayList(p1,p2); 
modelMap.addAttribute("list", list); 
Integer minAge = 13; 
modelMap.addAttribute("minAge", minAge); 
(...) 

in html:

<table th:with="min=${minAge}"> 
<tr th:each="person,rowStat : ${list.?[age > __${min}__]}"> 
<td><span th:text="${person.age}"></span></td> 
</tr> 
</table> 

Ausgang:

30 

Hope this Hilfe

+0

genial sehen - so mit $ {minAge} in jedem Block funktioniert nicht? – gmansoor

+0

Ich habe nicht versucht, ehrlich zu sein: P –

0

Innerhalb des Auswahlfilters sind nicht qualifizierte Eigenschaften relativ zum Element der zu filternden Sammlung. Die Variable #root ist jedoch immer als Stammkontextobjekt definiert. Auf diese Weise können Sie auf Variablen auf der Stammebene innerhalb des Auswahlfilters verweisen.

<tr th:each="artist,rowStat : ${listArtists.?[played gt #root.playedCountReq]}"> 
… 
</tr> 

Siehe "The #this and #root variables" in der Frühlings-EL-Dokumentation für weitere Informationen zu.

Verwandte Themen