Super Agile Struts開発記その6 - JSTL連動
JSTLと完全に連動できるようになりました。もちろん、JSTLやELがpublicフィールドを認識するし、HOT deployでメモリリークも起きません。よくあるHelloWorldのサンプルはこんな感じ。
package tutorial.web.hello
@Result(path="/hello/world.jsp")
public class WorldAction {public String name = "Seasar2";
@Execute
String execute() {
return "success";
}
}
world.jsp
これで、ブラウザから/hello/world.doにアクセスすると
<html>
<body>
Hello ${name}
</body>
</html>
と表示されます。Actionの変更ももちろん、HOTに認識します。Actionのプロパティは、リクエストの属性にプロパティ名と同じ名前で設定されているので、${プロパティ名}で簡単にプロパティにアクセスできます。
Hello Seasar2
publicフィールドを持ったJavaBeansも、もちろんJSTLとELがHOTに認識できます。
Hoge.java
Actionクラスを次のように定義します。
public class Hoge {
public String aaa;
}
JSPは次のように定義します。
public List<Hoge> hogeList = new ArrayList<Hoge>();@Execute
public String execute() {
for (int i = 0; i < 3; i++) {
Hoge hoge = new Hoge();
hoge.aaa = "aaa" + i;
}
hogeList.add(hoge);
return "success";
}
これを表示させると
<c:forEach items="${hogeList}" var="hoge">
$(hoge.aaa)<br />
</c:forEach>
のようになります。次のようなネストも可能です。
aaa0
aaa1
aaa2
public List<List<Hoge>> hogeListList =
new ArrayList<List<Hoge>>();@Execute
public String execute() {
for (int i = 0; i < 10; i++) {
List<Hoge> l = new ArrayList<Hoge>();
for (int j = 0; j < 2; j++) {
Hoge hoge = new Hoge();
hoge.aaa = "aaa" + i + j;
l.add(hoge);
}
hogeListList.add(l);
}
return "success";
}
<c:forEach items="${hogeListList}" var="hogeList">
<c:forEach items="${hogeList}" var="hoge">
${hoge.aaa}
</c:forEach>
<br />
</c:forEach>