request.jsp(リスト1)は、テキストボックスで入力された内容に応じて、「こんにちは、<入力値>さん!」という文字列を表示するJSPページです(図2)。
リスト1:request.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<fmt:requestEncoding value="Windows-31J" /> (3)
<html>
<head>
<title>リクエストデータの処理</title>
</head>
<body>
<form method="POST" action="request.jsp">
名前:
<input type="text" name="name" size="10" />
<input type="submit" value="登録" />
</form>
<c:if test="${!empty param['name']}"> (1)
こんにちは、${fn:escapeXml(param['name'])}さん! (2)
</c:if>
</body>
</html>
図2:入力値に基づいたあいさつ文の表示 (画像をクリックすると別ウィンドウに拡大図を表示します)
フォーム情報からメッセージを生成しているのはリスト1の1の部分です。
リスト1の1
<c:if test="${!empty param['name']}">
こんにちは、${fn:escapeXml(param['name'])}さん!
</c:if>
<c:if>タグはtest属性で指定された条件式がtrueである場合に配下のコンテンツを出力します。つまり、ここではparam['name']の値が!emptyである(空でない)場合、「こんにちは、〜さん!」というメッセージを表示するというわけです。
paramは、式言語内でアクセス可能な「暗黙オブジェクト」の1つで、フォーム情報(またはクエリ情報)にアクセスするための機能を提供します。暗黙オブジェクト内の情報には、下記のうちのいずれかの記述でアクセスすることができます(注5)。
${object['field']}
${object.field}
※注5:
このような記述の柔軟性は式言語の特長の1つですが、コードの可能性という観点からも、同一のアプリケーション内で複数の記述を混在させるのは極力避けるべきです。
また、emptyは式言語内で利用可能な演算子です。式言語では演算子を利用することで、式の評価や四則演算、比較など一般的な演算を行うことができます。
表2に式言語内で利用可能な主な暗黙オブジェクトを、表3に利用可能な主な演算子をあげておきます。なお、演算子は同等の機能を持つ別名(エイリアス)で置き換えることも可能です。
暗黙オブジェクト |
概要 |
param |
リクエストパラメータを取得 |
paramValues |
リクエストパラメータを取得(複数値) |
header |
ヘッダ値を取得 |
headerValues |
ヘッダ値を取得(複数値) |
initParam |
初期化パラメータを取得 |
cookie |
Cookie値を取得 |
pageScope |
ページ属性を取得 |
requestScope |
リクエスト属性を取得 |
sessionScope |
セッション属性を取得 |
applicationScope |
コンテキスト属性を取得 |
pageContext |
PageContextオブジェクトを取得 |
表2:式言語で利用可能な主な暗黙オブジェクト
分類 |
演算子(別名) |
概要 |
代数 |
+ |
加算 |
- |
減算 |
* |
積算 |
/(div) |
除算 |
%(mod) |
剰余 |
比較 |
==(eq) |
等しい |
!=(ne) |
等しくない |
>(gt) |
より大きい |
>=(ge) |
以上 |
<(lt) |
より小さい |
<=(le) |
以下 |
論理 |
&&(and) |
||(or) |
集合和 |
!(not) |
否定 |
その他 |
empty |
null、または空文字列 |
表3:式言語で利用可能な演算子
例えば、演算子には「<」や「>」「&」「%」のように、HTMLやJSPにおける予約文字が含まれるため、文脈によってはコンテナが正しく解釈できない場合があります。そのような場合に、エイリアスを利用することでトラブルを防ぐことができます。
次回はfn:escapeXmlなど文字のエスケープに関する部分について説明します。
|