私は、stringtemplate内のハイバネートクエリ結果を反復したいと思います。私は例を探していましたが、何も見つかりませんでした。stringtemplateのjavaリストはどのように反復処理しますか?
助けてもらえますか?おかげ
私は、stringtemplate内のハイバネートクエリ結果を反復したいと思います。私は例を探していましたが、何も見つかりませんでした。stringtemplateのjavaリストはどのように反復処理しますか?
助けてもらえますか?おかげ
%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は私のモデルのリストです。私はレコードを取得するために休止状態を使用しました。
構文はJavaでそれを一緒に置く
<items :{ item | <item> }>
次のようになります。この例では
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
:{ }
シンボルのセットは、結腸:
及び開閉ブレース{}
「が各々について」として読み取ることができます。サンプルテンプレートでは、team
ごとにteams
の印刷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 }>
次に、各項目について、我々はそのリスト内の項目を出力します。私たちは一緒に
String template = "<list :{ items |<items :{ item |<item> }><\\n>}>";
ST st = new ST(template);
st.add("list", listOfLists);
System.out.println(st.render());
をそれをすべて入れたら
<items :{ item |<item> }>
は、我々は次のようになり、結果を取得します。
One Two Three
Four Five
Six Seven Eight Nine
このコンセプトをもう少し構築すると、プレーヤーのリストを含む2番目のデータ構造を作成できます。これは反復の中でどのように反復するかを実証するでしょう。
最初に必要なのは、リストを含むデータ構造です。このために、我々は選手がチームになるようにチームを作ることができます。
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;
}
}
チームにはプレイヤーが含まれています。この構成は、2つの反復を構築することを可能にする。
私たちのデータ構造では、いくつかのプレイヤーといくつかのチームを作るためにすべてをまとめることができました。
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
テンプレートの複雑さを2番目の繰り返しで少し増やしましょう。
まず、playersTemplate
を作成します。これは上記のplayerTemplate
テンプレートとほぼ同じです。唯一の違いは、team
:team.players
から来るプレイヤーがいることです。
String playersTemplate = "<team.players :{ player |<player.name> is <player.age><\\n>}>";
次に、最初のテンプレートを含む2番目のテンプレートを作成します。このテンプレートでは、チームごとに反復することができ、チームごとに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(例えばfor)がクラスCatsであり、文字列ではない場合、どうなるでしょうか。私が言いたいことは、リスト内にリストが存在するかどうかです。どうすればその問題を解決できますか?私はそれを解析する問題に直面しており、「このような要素の例外はありません」となっています。誰か助けてもらえますか? – AnirbanDebnath
私はあなたの質問に完全にコメントすることができるのか分かりません。私は試みます。自分のクラスを反復処理している場合は、gettersを呼び出すことができます。この例では、各チームがgetNameメソッドを持つTeamクラスであるとします。そのメソッドを呼び出す
@AnirbanDebnath私はあなたの質問に答えるための例を更新しました。私はそれが助けて欲しい –
Javaコレクションを繰り返し処理できる場合は、そこに結果リストを送信して実行できます。それはどんなテンプレートエンジンのためのかなりの標準でなければなりません... – Thihara