アクションの配列プロパティを指定の文字で連結する

[Action側]
public String[] hoge = {"aaa", "bbb", "ccc"};


[JSP側]
${fn:join(hoge, '=')}


これは、正しく動作しませんでした。

理由は、以下のSeasar MLのひがさんの説明を参照。

ActionやActionFormのプロパティは、 publicフィールドを ELやStrutsが参照できるようにするために、 JavaBeansはMapに、配列はListにラップされています。 プロパティアクセス(.)や配列アクセス([数値])以外のやり方で、 変数にアクセスするときには気をつけてください。


以前のエントリーでは、勉強という目的もあったので、
ファンクションを自作しましたが、以下のようなやり方の方が
実際には簡単ですね。


ArrayAction.java

public class ArrayAction {

	public String[] hoge = {"aaa", "bbb", "ccc"};
	
	@Execute(validator = false)
	public String index() {
		return "array.jsp";
	}
}


array.jsp

<c:forEach var="h" varStatus="s" items="${hoge}">
    ${h}${s.last ? "" : ", "}
</c:forEach>


実行結果

aaa, bbb, ccc


c:forEachタグのvarStatus属性は、
varStatus="変数名" のようにして、ループ内の処理からループの状態を
参照するための変数名を指定します。
"変数名".last は最後の要素であればTrueを返します。


追記:
id:higayasuoさんからコメントを頂きましたが、
特別な書式指定がなければ、以下の方法が一番楽だと思います。


array.jsp

${f:h(hoge)}


実行結果

[aaa, bbb, ccc]