ひがやすを技術ブログ

電通国際情報サービスのプログラマ

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


<html>
<body>
Hello ${name}
</body>
</html>
これで、ブラウザから/hello/world.doにアクセスすると

Hello Seasar2
と表示されます。Actionの変更ももちろん、HOTに認識します。Actionのプロパティは、リクエストの属性にプロパティ名と同じ名前で設定されているので、${プロパティ名}で簡単にプロパティにアクセスできます。
publicフィールドを持ったJavaBeansも、もちろんJSTLとELがHOTに認識できます。

Hoge.java


public class Hoge {
public String aaa;
}
Actionクラスを次のように定義します。

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";
}

JSPは次のように定義します。

<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>