JSPのEL式とスクリプトレットを相互変換する方法!SAStrutsでpageスコープの変数を取得!
SAStrutsでウェブページの画面をJSPで構築する際に、
フォームやリクエスト、セッション等、各種スコープに格納した値を取得する処理が必要になりますよね。
正直なところ自由度が大きすぎて、どのようなコーディングが現実的なのか迷うこともあると思います。
特に困るのが、スクリプトレットとEL式の使い分けです。
両方とも記述方式に違いが合ったり、仕様や用途が大きく違います。
スクリプトレットの記述方法
スクリプトレットはJSP上でJavaの構文プログラムを記述するための記法のことです。
「<%」と「%>」で囲んだ範囲がJavaの世界に置き換わり、
通常のJavaファイルと同じような記述が可能です。
1 2 3 | <% String str = "自作PCテクニカルセンター"; %> |
上記の記述によって、JSP内でJavaの構文を記述できます。
値をJSP内で出力する場合は「<%= {変数名} %>」と書きますね。
1 | <%= str %> |
EL式の記述方法
EL式とはExpression Languageの略となり、「式言語」とも呼ばれます。
特徴はJSPをより簡単に書くために提供された機能でJSP2.0より導入されています。
EL式の記述では「${変数名}」と書くケースもあれば「${構文}」と書くケースがあります。
1 2 3 4 5 6 7 8 | <%-- // 値を出力する場合 --%> <c:out value="${str}" /> <!-- 既にstrに値が入っている場合に限る. --> <%-- // 判定式に利用する場合. --%> <c:if test="${str.equals('自作PCテクニカルセンター')}"> <span>一致しました。</span> </c:if> |
このように「${}」内に変数を記述したり、式を記述できます。
なので「式言語」と言われます。
EL式の変数情報が格納されるスコープはpage
EL式として扱える変数は、サーブレットのpageスコープに格納されています。
具体的にはJSPを構成している「PageContext」内にあります。
尚、pageスコープに関してはプログラム開発者が記述や指定をしなくても自動的に呼び出しができます。
なので、JSP上でpageContextと変数を記述しても普通に使えます。
まあ暗黙的なオブジェクトとなっています。
さて、ここで何がやりたいかと言いますと、
スクリプトレットとして記述した変数をEL式の変数として使う場合、
その逆のEL式として登録された変数をスクリプトレットの記述に使いたい場合です。
スクリプトレットとEL式の変数を相互に変換する方法
スクリプトレットとEL式の変数を相互に変換して利用したい場合の方法を記載しておきます。
本当はもっと良いやり方があるのかもしれないけど・・・。
スクリプトレットからEL式に変換
1 2 3 4 5 6 7 8 9 10 | <% // (1) スクリプトレット上で変数を宣言. String test = "テスト"; %> <%-- // (2) タグリブで変数を登録する (自動的にpageContextに追加される). --> <c:set var="test" value="<%= test %>" /> <%-- // (3) EL式として登録した変数を出力. --> ${test} |
スクリプトレットの記述内に変数を宣言して、タグリブで変数を格納し、
最終的にEL式で呼び出せます。
EL式からスクリプトレットに変換
1 2 3 4 5 6 7 8 | <%-- // (1) 前提: ${test}で呼び出せる状態であること. --%> <% // (2) スクリプトレットでpageスコープのpageContextにアクセスし変数を取得. String test = (String)pageContext.findAttribute("test"); %> <%-- // (3) スクリプトレットでEL式に格納されていた変数を出力. --%> <%= test %> |
EL式で呼び出せるものはサーブレットの「page」スコープに存在しているので、
無理やりスクリプトレット上で呼び出して、適当な変数に格納し、最終的に出力すればOKです。
そもそもスクリプトレットとEL式を混在させた処理は望ましくないですし、
用途に応じて使い分けるものなので、よっぽどのことがない限りはこのような変換はしないほうがよいのでしょう・・・。


最新記事 by よっき (全て見る)
- 「圧着」と「圧接」の違い!コネクタを使った効率的な配線作業! - 2019年10月26日
- 夏の暑さ対策は大丈夫?冷却性能抜群のおすすめCPUクーラー!メモリに干渉しない最強の商品を紹介! - 2018年5月1日
- 自作PC弐号機のケースを換装!SilverStone製のミニタワーで冷却性とかっこよさを追求! - 2018年3月11日
スポンサードリンク