m2

JSP の EL式って全然タイプセーフじゃないし、スクリプトレットの方がコード補完が効いてウマーじゃないですか?

最近 JSP を触っていて、EL式の使い勝手に困惑しています。なんでコード補完効かないんだと。*1
以下のループの例を見てください。

<c:forEach var="i" items="1,2,3">
    <c:out value="${i.bytes[0]}:" />
</c:forEach>
<hr>
<% for (String i : "1,2,3".split(",")) { %>
    <c:out value="<%= i.getBytes()[0] %>" />:
<% } %>

どうです? ほとんど変わらない上にスクリプトレットの方が eclipse でコード補完が効きますよ?

Map の場合

<c:forEach var="i" items="${map}">
    <c:out value="${i.key}:${i.value}," />
</c:forEach>
<hr>
<% for (Entry<String, String> i : map.entrySet()) { %>
    <c:out value="<%= i.getKey() + \":\" + i.getValue() %>" />,
<% } %>

後者は以下の宣言に依存。

<%! 
// http://d.hatena.ne.jp/unageanu/20071017/1192623693
@SuppressWarnings("unchecked")
public <T> T cast(Object obj) {
    return (T)obj;
}
%>
<% Map<String, String> map = cast(pageContext.findAttribute("map")); %>

cast については static import して共通化できますし、pageContext.findAttribute については SAStruts plugin あたりが自動生成すりゃいいんじゃない? と思ってます。


JSP の現在の流れだと「スクリプトレットを排除してカスタムタグ+EL式で!」って感じがするのだけど、コード補完の効かない EL式よりスクリプトレットの方が生産性が高いんじゃないのかな、と思いました。

反論ほしいです(あと var も)。

  • -

「デザイナーが云々」というのは Mayaa で FA ということで。

*1:型が確定しないからどうしようもないんですがね。