忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/20 11:21 |
JSP1-3:ELでHelloWorld
最近のJavaの仕様では、JSPを使うな、かわりにELとカスタムタグを使えと書かれています。
これまで覚えてきたJSPはどうなるの?
ゴミです。

elsample.jsp
<html>
<head>
    <title>計算</title>
</head>
<body>
    ${100 * 100}
    ${applicationScope.data}
</body>
</html>

計算結果の10000が表示されます。
アプリケーションスコープにセットされている変数dataの内容が表示されます。
見てのとおり、Smartyそのものです。

簡単ですか?
とんでもない。

HelloWorld.jsp
<%
    String a="Hello,World";
%>
<html>
<head>
    <title>Hello, World!!</title>
</head>
<body>
    ${a}
</body>
</html>


何も表示されません。

pageContext.setAttribute("a",a);
と、わざわざスコープにセットしないと、同一ページ内なのに読み取ることができません。

では問題です。

<%
    pageContext.setAttribute("a","pageContext");
    request.setAttribute("a","request");
    session.setAttribute("a","session");
    application.setAttribute("a","application");
%>
<html><body>
            ${a}
</body></html>

なんと表示されるでしょう。
正解はpageContextです。
ELは、ページスコープ、リクエストスコープ、セッションスコープ、アプリケーションスコープの順で勝手に検索して、最初に見つかったオブジェクトを表示してくれます。
楽といえば楽ですが、別のスコープに対してうっかり同じ変数名を使ってしまうと誤動作してしまう可能性があります。
この場合、セッションスコープの変数を取得したければ${sessionScope.a}と記入します。

Javaの思想のひとつが厳密なスコープ管理だったはずなのですが、こんな中途半端にアバウトな仕様が混入したせいで台無しな趣があります。


ELの特徴のひとつとして、Map等連想配列の取り扱いがあります。
取得だけとはいえELではJavaScriptやPHPと同じくらい簡単に連想配列を扱うことができます。
${map.key}
${map["key"]}
${map['key']}

とJavaScriptそのものの書き方ができます。
連想ではない配列も、
${array[0]}
${array["0"]}
${array['0']}

で取得することができます。
何故か${map[key]}とか${array.0}とは書けません。

配列ではなくMapオブジェクトと呼べとかそういう異議は受け付けない。


実際ELだけでなにもかもを表示するのは、Smartyですべてを表示しようとするのと同じく却ってわかりにくくなるだけなので、結局のところJSPなり他の表現手段なりを併用することになります。

PR


2008/07/29 19:45 | Comments(0) | TrackBack(0) | Java

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-12:array_multisort | HOME | その他0-4:PukiWikiをインストールしてみる>>
忍者ブログ[PR]