2014-09-25 7 views
12

Ok, sono un nuovo arrivato bagnato di orecchie e foglie di palma. Sto cercando di fare qualcosa di così semplice che dovrebbe essere un gioco da ragazzi. Ma non riesco a farlo funzionare. La semplice domanda è: come mostrare un elenco di stringhe in una pagina Web?Spring, Thymleaf e liste di stringhe

Ho il seguente modello

import java.util.List; 
public class TestModel { 

    private List<String> list = null; 
    private String content; 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String content) { 
     this.content = content; 
    } 

    public List<String> getList() { return list; } 

    public void setList(final List<String> list) { 
     this.list = list; 
    } 
} 

La mia pagina web contiene i seguenti:

<div th:if="${greeting.list != null}"> 
    <h1>Result</h1> 
    <ul> 
    <th:block th:object="${greeting}" th:each="item : ${list}"> 
    <li th:text="${item.name}">Item description here...</li> 
    </th:block> 
    </ul> 
</div> 

ho aggiunto il ".name" a "voce" solo perché ho trovato un paio di esempi in cui avevano una lista di stringhe e hanno fatto qualcosa di simile. Ma avevano il ".name" sull'oggetto.

Ma ancora non funziona. L'elenco non ordinato finisce vuoto. Cioè Non ci sono voci di elenco all'interno dei tag non ordinati.

Cosa am Ho sbagliato? I puntatori hanno accettato volentieri.

risposta

19

Dato che non esiste un esempio di riempimento del modello, suppongo che tu abbia inserito alcune stringhe nell'istanza del campo elenco TestModel come questo.

TestModel greeting= new TestModel(); 
List<String> list = new ArrayList<>(); 
list.add("A"); 
list.add("B"); 
model.addAttribute("greeting", greeting); 

Quindi ci sono altri errori nell'esempio del modello di Thymeleaf.

  1. Se si utilizza la selezione degli oggetti attraverso th:object è necessario in primo luogo l'uso asterix * di accedere alle proprietà degli oggetti. La sintassi di asterisco valuta le espressioni su oggetti selezionati anziché la mappa delle variabili di contesto.
  2. La selezione degli oggetti interessa solo i nodi figli nel DOM.
  3. Nell'esempio si desidera iterare sull'elenco di stringhe (List<String>) ma si desidera accedere alla proprietà name che in effetti non esiste su Java String oggetto.

È necessario correggere il modello di Thymeleaf in un modo: vedere gli esempi.

Nessuna selezione oggetto affatto

<div th:if="${greeting.list != null}"> 
    <h1>Result</h1> 
    <ul> 
     <li th:each="item : ${greeting.list}" th:text="${item}">Item description here...</li> 
    </ul> 
</div> 

selezione oggetto proprio

<div th:if="${greeting.list != null}"> 
    <h1>Result</h1> 
    <ul> 
    <th:block th:object="${greeting}"> 
     <li th:each="item : *{list}" th:text="${item}">Item description here...</li> 
    </th:block> 
    </ul> 
</div> 
+0

Entrambi gli esempi hanno funzionato. Grazie per avermi messo dritto. Come ho detto - Sono * molto * nuovo alla sintassi del timeleaf. Devo ancora trovare un buon tutorial che descrive quando usare cosa. Ho copiato un esempio da un altro sito ma non ha funzionato. Ancora una volta, grazie per il vostro aiuto. –

+1

Salve, ok, spero che il mio esempio ti aiuti con questo problema. Posso consigliare la documentazione ufficiale di Thymeleaf. È facile da leggere e pieno di esami. Ci sono anche alcuni tutorial sul sito ufficiale. Controlla http://www.thymeleaf.org/documentation.html –

1
<table th:object="${userList}" id="userTable" border="1"> 
    <tr th:each="user :${userList}"> 
     <td th:text="${user.getName()}"></td> 
     <td th:text="${user.getEmail()}"></td> 
    </tr> 
</table> 

altro esempio utilizzando la tabella e oggetto. Potrebbe essere utile a qualcun altro.

Problemi correlati