パッケージ org.apache.struts.taglib.logic

"struts-logic"タグライブラリは次のような便利なタグを含みます。

参照:
          説明

クラスの概要
CompareTagBase Abstract base class for comparison tags.
ConditionalTagBase Abstract base class for the various conditional evaluation tags.
EqualTag Evaluate the nested body content of this tag if the specified variable and value are equal.
ForwardTag Perform a forward or redirect to a page that is looked up in the global ActionForwards collection associated with our application.
GreaterEqualTag Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
GreaterThanTag Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
IterateTag Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
IterateTei Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
LessEqualTag Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
LessThanTag Evaluate the nested body content of this tag if the specified variable is less than the specified value.
MatchTag Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
NotEqualTag Evaluate the nested body content of this tag if the specified variable and value are not equal.
NotMatchTag Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
NotPresentTag Evalute the nested body content of this tag if the specified value is not present for this request.
PresentTag Evalute the nested body content of this tag if the specified value is present for this request.
RedirectTag Generate a URL-encoded redirect to the specified URI.
 

パッケージ org.apache.struts.taglib.logic の説明

"struts-logic"タグライブラリは次のような便利なタグを含みます。

[最初に] [ロジックタグの機能] [ロジックタグの属性] [ロジックタグの例]


最初に

ロジックライブラリは、スクリプトレットを使うことなくプレゼンテーション層のロジックを扱うための便利なタグを提供します。

ロジックタグの機能

ロジックタグの機能は4つのグループに分類されます。

値の比較 - これらのタグの用途は、比較評価の結果が の場合にタグのボディを出力することです。

部分文字列の一致 - これらのタグの用途は、ある文字列の一部分と部分文字列が一致するかを照合することです。

画面遷移 - これらのタグの用途は、 表示しているページを遷移させることです。

コレクションユーティリティ -これらのタグの用途はコレクションを扱うことです。

ロジックタグの属性

ロジックタグの4つのグループは、それぞれで共通した属性を持ちます。

値の比較 (equal(等しい), notEqual(等しくない), greaterEqual(以上), lessEqual(以下), greaterThan(より大きい), lessThan(未満), present(存在する), notPresent(存在しない))

値を比較するそれぞれのタグはvalue(値)を持ち、比較対象の属性の値とそれを比較します。 与えられた値がfloatあるいはdoubleに変換可能な場合、 その与えられた値と比較対象の属性の値との間で数値比較が行なわれます。 変換不能な場合はStringでの比較が行なわれます。 cookie, header, parameter, property, nameのうち、 いずれか一つを指定する必要があります。 以下の例にある"someComparisonTag"タグは、 値を比較するいずれかのタグに置き換えることが出来ます。

部分文字列の一致 (match, notMatch)

部分文字列の一致タグは、値比較タグと全く同じ引数を取ります。 cookie, header, parameter, property, name で与えられたいずれの値も、valueで指定された文字列と比較します。 注:例の中のmatchTagmatch notMatchタグのいずれかに相当します。 また、部分文字列の一致タグには、location属性が追加されています。

遷移先の画面 (forward, redirect)

redirectタグは、クライアントのブラウザにリダイレクトする役割を持ち、 コンテナがサポートしている場合はURLリライティングを使います。 属性は、StrutsのHTML linkタグと同じです。 基準のURLは、指定された以下の属性を基にして求めます(以下のうち一つを確実に指定しなければなりません)。

forwardタグは、指定されたグローバルなアクションの遷移先に対して、 リダイレクトとフォワード両方を引き受けます。 グローバルなアクションの遷移先を規定するためには、 アクションマッピング設定ファイル を参照して下さい。 リダイレクトとフォワードのいずれを実行するかは、設定ファイルによって指定することが可能です。 forwardタグには一つだけ属性があります:

コレクションユーティリティ (iterate)

iterateタグは、指定されたコレクション内部の各要素に対して、 本体(body)を一度ずつ実行する役割を持ちます。 必須属性が1つあります:

他の属性は、コレクションの繰り返しを柔軟に行うことを可能にします。使い方は:

<logic:iterate id="myCollectionElement" collection="<%= vector %>">
myCollectionElementに対する処理
</logic:iterate>

ロジックタグの例

値の比較

ロジック同値タグ(equal, notEqual, greaterEqual, lessEqual, lessThan, greaterThan)

これらのタグを、一般的な言語の"==", "!=", ">=", "<=", "<", ">" という論理演算子に例えることが可能です。 これらは素直に数値に対して使用します。 例えば、フォームから入力されたリクエストパラメータを使う、 ちょっとした"数当て"ゲームを作るとしましょう。 数字は、"7"などのように直書きされています(何せ例ですから)。 この例はJSPの中にアプリケーションロジックを置いていて、 Strutsで推奨する開発方法ではないことに注意して下さい。 このタグの使い方を説明するためのあくまで簡単な例です。

まず最初に、処理対象のJSPにフォームを作成します。 このフォームは"GET"メソッドで作成します。そうすることで、 URLのリクエストパラメータを確認することが出来るからです。 POSTメソッドももちろん問題なく使えます。

[numberGuess.jsp]

<form action="numberProcess.jsp" method="GET">
1から10までの数字を入力して下さい。: <input type="text" name="number" /><br />
  <center>
    <input type="submit" name="Guess Number" />
  </center>
</form>
続いて、処理ページを作成します。これはStrutsのロジックタグライブラリを使っています。 このタグライブラリをアプリケーションから使うための設定方法は、
Webアプリケーション配備記述子をご覧下さい。

[numberProcess.jsp]

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<!-- 考えた数字は正しいか? -->
<logic:equal parameter="number" value="7">
  あったりー! 高速ミキサーを進呈
</logic:equal>
<!-- If the number guessed was wrong -->
<logic:notEqual parameter="number" value="7">
  <!-- 以下 -->
  <logic:lessThan parameter="number" value="7">
         もうちょっと大きい...
  </logic:lessThan>
  <!-- 以上 -->
  <logic:greaterThan parameter="number" value="7">
         もうちょっと小さい...
  </logic:greaterThan>
</logic:notEqual>

基本的に、numberProcess.jspページは、考えた数字が7かどうかを判断するためにequalタグを使い、 もしそうならばおめでとうのメッセージを表示します。 もし等しくない場合、数字が7より大きいか小さいかを判断するために、 <logic:notEqual>の中で指定されたgreaterThanとlessThanを使ってヒントを表示します。 先に書いたように、これはひどい設計の小さなアプリケーションです。 入力された数字の妥当性検査もありません。 ですが、ロジックequalタグの基本的な使い方はわかります。

文字列比較に対して、equalタグはjava.lang.String.compareTo()メソッドを適用します。 compareTo()メソッドに関する詳細な情報は、 ここ をご覧下さい。

一致と存在のタグ(match, notMatch, present, notPresent)

matchタグは、部分文字列の一致のためにpresentタグと共に使われます。 これを用いた例は、ヘッダ、特に"Referer"ヘッダを使います。 HTTPのrefererヘッダは、リクエスト元のURLを示すドキュメントのURLを返します。 これを利用すると、Google サーチで指定されたリンクからユーザが来たかどうかを判断して個人向けの挨拶を提供し、 サーチエンジンを通じてそのユーザが検索するブラウジングの習慣を、 よく知っていると驚かせます。

[sneaky.jsp]

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>


<!-- "Referer" ヘッダが存在するか確認する -->
<logic:present header="Referer">
  <logic:match header="Referer" value="google.com">
    あなたはGoogleから来ましたね... 面白い。
  </logic:match>
  <logic:notMatch header="Referer" value="google.com">
    ようこそ当サイトへ。あなたがどこから来たのかこっそりと記録しました。
    だって、私たちはうさんくさいので...
  </logic:notMatch>
</logic:present>

<!-- もしヘッダがない場合 -->
<logic:notPresent header="Referer">
  ようこそ当サイトへ。
  <a href="nonExistantForm.jsp">フォーム</a>を埋めて、
  どこから来たのかを教えて下さい。
</logic:notPresent>

Note: Another interesting usage of these tags and headers would be to use the "User-Agent" header to display browser-specific javascript.

注意: ブラウザが指定するJavaScriptを表示するために"User-Agent"ヘッダを使うという、 別の面白い利用方法もあります。

コレクションユーティリティ(iterate)

<logic:iterate>タグを使う例では、以前の例をそっくりそのまま利用します。 この例では、Beanタグライブラリの<bean:write>タグを使います。 詳しくはbeanタグライブラリのユーザーガイドをご覧下さい。

[iterate.jsp]

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%
java.util.ArrayList list = new java.util.ArrayList();
  list.add("First");
  list.add("Second");
  list.add("Third");
  list.add("Fourth");
  list.add("Fifth");
  pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
%>

<logic:iterate id="myCollectionElement" name="list">
  Element Value: <bean:write name="myCollectionElement" /><br />
</logic:iterate>

[訳注: これは田中良浩が翻訳しました.日本語訳に対するコメントがあれば、 report@jajakarta.orgに送って下さい。]



このドキュメントは、Ja-Jakartaにより訳されました。コメントがある場合は、report@jajakarta.orgまでお願いします。
Copyright (C) 2000-2002 - Apache Software Foundation