回答
%staffForOrg: {staff|
<tr>
<td><a href="#%staff.id%a" class="directory " id="%staff.id%1" onclick="javascript: window.location='StaffInfo.html?id=%staff.id%';">%staff.telephoneNumber%</a></td>
</tr>
}%
此代碼的工作非常完美。
staffForOrg是我的模型的列表。我用休眠來檢索記錄。
的語法看起來像
<items :{ item | <item> }>
將其組合在一起在Java中:
List<String> teams = Arrays.asList("Cats", "Birds", "Turtles");
ST s = new ST("<teams :{team | <team> }>");
s.add("teams", teams);
System.out.println(s.render());
在這個例子中,我遍歷表並打印出每個。將要打印的結果是:
Cats Birds Turtles
我們可以探索使這種情況發生的語法。在我們開始之前,請記住,StringTemplate中的默認分隔符小於<
並大於>
。由於我們沒有指定不同的分隔符,這些將成爲我們在示例中使用的分隔符。 See more about delimiters
:{ }
這組符號,結腸:
和打開和閉合支架{}
可以讀作「對每個」。在示例模板中,代碼讀取teams
中的每個team
print team
。垂直管道|
的左側表示將爲每次迭代創建的變量。它將從團隊名單中保留當前團隊。該印刷品由垂直管道|
右側的<team>
和右側支撐杆}
的左側組成。垂直管道|
右側和結束基地}
之前的任何內容都將被評估爲打印。
:{ current value | everything in here will be printed }
爲了構建這個概念,我們使用一個更復雜的數據結構。現在
public class Player {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() { return age; }
public String getName() { return name; }
}
,我們可以爲我們的隊一些球員:
Player[] players = new Player[] {
new Player("Bill", 29),
new Player("Steve", 30),
new Player("Toby", 15)
};
String playerTemplate = "<players:{ player |<player.name> is <player.age> <\\n>}>"
ST s = new ST(playerTemplate );
s.add("players", Arrays.asList(players));
System.out.println(s.render());
給予
Bill is 29
Steve is 30
Toby is 15
幾件事情要注意的結果。我們沒有直接訪問屬性的年齡和名稱。 ST調用方法getAge和getName。 ST不看這些屬性。相反,它會查找訪問方法。
如果我們只是想遍歷包含另一個列表的列表,該怎麼辦。我們也可以做到這一點。首先,讓我們建立我們的數據結構並填充一些列表。
List<List<String>> listOfLists = asList(
asList("One", "Two", "Three"),
asList("Four", "Five"),
asList("Six", "Seven", "Eight", "Nine")
);
該模板將如下所示。
<list :{ items |<items :{ item |<item> }><\n>}>
我們在這種情況下的模板只是一個組合。外殼將迭代我們將要交付的列表。
<list :{ items | what we will print }>
然後對於每個項目,我們將打印出列表中的項目。
<items :{ item |<item> }>
一旦我們把它放在一起
String template = "<list :{ items |<items :{ item |<item> }><\\n>}>";
ST st = new ST(template);
st.add("list", listOfLists);
System.out.println(st.render());
我們得到的結果,看起來像下面這樣。
One Two Three
Four Five
Six Seven Eight Nine
基於這個概念,我們可以創建第二個包含玩家列表的數據結構。這將演示如何在迭代中迭代。
我們首先需要的是一個包含列表的數據結構。爲此,我們可以創建一個供我們的球員參與的團隊。
public class Team {
private List<Player> players;
private String name;
public Team (String name, List<Player> players) {
this.players = players;
this.name = name;
}
public List<Player> getPlayers() {
return players;
}
public String getName() {
return name;
}
}
請注意,我們的團隊包含玩家。這個組合將允許我們建立兩個迭代。
既然我們有了我們的數據結構,就可以將所有的東西放在一起,組成一些球隊的隊伍。
List<Team> teams = asList(
new Team("Billings", asList(
new Player("Bill", 29),
new Player("Steve", 30),
new Player("Toby", 15)
)),
new Team("Laurel", asList(
new Player("Chad", 32),
new Player("Chuck", 29),
new Player("Will", 24),
new Player("Ben", 26)
))
);
現在,讓我們創建一個模板,並填寫一些細節:
String simpleTeamTemplate = "<teams:{ team |<team.name> has <length(team.players)> players<\\n>}>";
ST template = new ST(simpleTeamTemplate);
template.add("teams", teams);
System.out.println(template.render());
,將打印出來
Billings has 3 players
Laurel has 4 players
我們簡單的模板是半斤八兩正如我們的第一個模板以上。唯一真正的區別是我們正在使用方法length()
中的內部版本。 See more on functions here
讓我們在第二次迭代中增加一些模板的複雜性。我們將創建playersTemplate
。這與我們上面的playerTemplate
模板幾乎完全相同。唯一的區別是我們的球員來自team
:team.players
。
String playersTemplate = "<team.players :{ player |<player.name> is <player.age><\\n>}>";
現在我們將構建第二個包含第一個模板的模板。在此模板中,我們可以遍歷團隊,併爲每個團隊打印出name
,玩家人數length(team.players)
以及playersTemplate
中的所有內容。
String teamTemplate = "<teams:{ team |<team.name> has <length(team.players)> players<\\n>"+playersTemplate+"}>";
現在讓我們把它放在一起。
ST teamsTemplate = new ST(simpleTeamTemplate);
teamsTemplate.add("teams", teams);
System.out.println(teamsTemplate.render());
這將爲我們打印以下內容。
Billings has 3 players
Bill is 29
Steve is 30
Toby is 15
Laurel has 4 players
Chad is 32
Chuck is 29
Will is 24
Ben is 26
現在,你不是真的想要以這種方式組合你的模板。將字符串附加在一起來組成模板是相當愚蠢的。 StringTemplate提供了使部分模板的組合非常容易的工具。如果你對組合模板感興趣,你可以找到更多的here
如果Cats(例如)是類Cat而不是字符串,會發生什麼情況。我的意思是說,如果列表中可能有List,那麼該怎麼辦?我如何解決這個問題。我面臨的問題解析,得到「沒有這樣的元素例外」。有人可以請求幫助 – AnirbanDebnath
我不知道我可以在評論中完全解決您的問題。我會嘗試。如果你正在迭代你自己的類,你可以調用getters。在示例中可以說每個團隊都是一個具有getName方法的Team類。我們可以致電
@AnirbanDebnath我更新了這個例子來回答你的問題。我希望有所幫助。 –
- 1. 如何遍歷Java列表中的JavaScript
- 2. Java遍歷對象列表
- 3. 遍歷通用列表java
- 4. Java - 如何遍歷散列表列表的散列圖
- 5. 遍歷java中的2個列表
- 6. 遍歷java中的大部分列表
- 7. 如何做列表遍歷?
- 8. 如何遍歷ID列表
- 9. 如何遍歷javascript中的列表
- 10. 遍歷java中的鏈表
- 11. 遍歷列表
- 12. 遍歷列表
- 13. 遍歷列表
- 14. 遍歷列表
- 15. 遍歷列表
- 16. 遍歷列表的列表?
- 17. 遍歷haskell中的列表
- 18. 遍歷MySQL表中的列
- 19. 遍歷oracle表中的列
- 20. 遍歷javascript中的列表
- 21. 如何遍歷整數數組列表的元素在Java中
- 22. 在Java中,我如何遍歷ArrayList的子列表?
- 23. 如何從表頭中遍歷列vba
- 24. 如何遍歷列表視圖列
- 25. 遍歷SharePoint列表中的列表2013
- 26. 如何遍歷thymeleaf中另一個列表中的列表?
- 27. 在Java中,如何同時遍歷兩個列表?
- 28. 如何將多個bean添加到列表並遍歷java中的列表?
- 29. Jquery遍歷列表
- 30. QTreeview遍歷列表
如果你可以迭代一個Java集合,那麼你可以發送結果列表在那裏,並做到這一點。它應該是任何模板引擎的標準... – Thihara