|
||||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
参照:
説明
| クラスの概要 | |
| 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. |
"struts-logic"タグライブラリは次のような便利なタグを含みます。
ロジックライブラリは、スクリプトレットを使うことなくプレゼンテーション層のロジックを扱うための便利なタグを提供します。
ロジックタグの機能は4つのグループに分類されます。
値の比較 - これらのタグの用途は、比較評価の結果が真 の場合にタグのボディを出力することです。
部分文字列の一致 - これらのタグの用途は、ある文字列の一部分と部分文字列が一致するかを照合することです。
画面遷移 - これらのタグの用途は、 表示しているページを遷移させることです。
コレクションユーティリティ -これらのタグの用途はコレクションを扱うことです。
ロジックタグの4つのグループは、それぞれで共通した属性を持ちます。
値の比較 (equal(等しい), notEqual(等しくない), greaterEqual(以上), lessEqual(以下), greaterThan(より大きい), lessThan(未満), present(存在する), notPresent(存在しない))
値を比較するそれぞれのタグはvalue(値)を持ち、比較対象の属性の値とそれを比較します。 与えられた値がfloatあるいはdoubleに変換可能な場合、 その与えられた値と比較対象の属性の値との間で数値比較が行なわれます。 変換不能な場合はStringでの比較が行なわれます。 cookie, header, parameter, property, nameのうち、 いずれか一つを指定する必要があります。 以下の例にある"someComparisonTag"タグは、 値を比較するいずれかのタグに置き換えることが出来ます。
- value - このタグと比較すべき値です。次に挙げる比較対象の属性のうちの一つと共に使用します。 cookie, header, parameter, property, name。 propertyとnameは、同時に使うこともできます。
- cookie - valueと比較するクッキーの名前です。
- 例:
<logic:someComparisonTag value="someUserName" cookie="userName"> ログインしました </logic:someComparisonTag>- header - valueと比較するHTTPヘッダの名前です。
- 例:
<logic:someComparisonTag value="en_US" header="Accept-Language"> Welcome English-speaking User* </logic:someComparisonTag>*注意: より詳しくは、国際化されたメッセージ の利用者ガイドの中の項目を参照して下さい。
- name - valueと比較する変数です。 propertyが指定されていない場合は、この属性によって指定されたJSP上のbean自体です。 propertyが指定されている場合は、そのbeanが持つプロパティの値です。
- 例:
<% String testString = "pantalones"; pageContext.setAttribute("testString", testString, PageContext.PAGE_SCOPE); %> <jsp:useBean id="testString" scope="page" type="java.lang.String" /> <logic:someComparisonTag name="testString" value="pantalones"> Usted tiene pantalones! </logic:someComparison>- parameter - valueと比較するリクエストパラメータの名前です。
- 例:
<logic:someComparisonTag value="" parameter="username"> エラー: ユーザ名を指定して下さい </logic:someComparisonTag>- property - このタグの属性で定義されたプロパティ(name属性で指定されたbeanのもの)で、 valueと比較する変数です。 プロパティの参照は simple, nested, indexedです(nestedとindexedは同時使用可能)。 property はnameと同時に使用され、nameによって規定されるbeanのプロパティです。 プロパティに対して使用出来る文法の種類は、Beanタグのユーザーズガイドを参照して下さい。
- scope - name属性で指定されたbenaを検索する際のスコープです。 これが指定されなかった場合は"any scope"として扱います。 指定可能な値は、"page"・"request"・"session" ・"application"・"any scope"です。
部分文字列の一致 (match, notMatch)
部分文字列の一致タグは、値比較タグと全く同じ引数を取ります。 cookie, header, parameter, property, name で与えられたいずれの値も、valueで指定された文字列と比較します。 注:例の中のmatchTagはmatch かnotMatchタグのいずれかに相当します。 また、部分文字列の一致タグには、location属性が追加されています。
- location - これは、"start"と"end"の2つの値を取り得ます。 "start"は、対象文字列の先頭で一致する部分文字列の一致を試みます。 "end"は、対象文字列の末尾で一致する部分文字列の一致を試みます。
- 例:
<logic:matchTag parameter="action" value="processLogin" location="start"> ログイン中.... </logic:matchTag> この例では、リクエストパラメータである"action"の値が、"processLogin"という 文字列で始まっているかを比較しています。 この場合matchTagは、<logic:match>でなければなりません。遷移先の画面 (forward, redirect)
redirectタグは、クライアントのブラウザにリダイレクトする役割を持ち、 コンテナがサポートしている場合はURLリライティングを使います。 属性は、StrutsのHTML
linkタグと同じです。 基準のURLは、指定された以下の属性を基にして求めます(以下のうち一つを確実に指定しなければなりません)。
- forward - この属性の値はグローバルActionForwardの名前として検索し、 そこで見つかったコンテキスト相対URIを使います。
- href - この値をそのまま使います。
- page - コンテキスト相対URIとしてこの値を使い、 コンテキストパスを含んだサーバー相対URIを生成します。
forwardタグは、指定されたグローバルなアクションの遷移先に対して、 リダイレクトとフォワード両方を引き受けます。 グローバルなアクションの遷移先を規定するためには、 アクションマッピング設定ファイル を参照して下さい。 リダイレクトとフォワードのいずれを実行するかは、設定ファイルによって指定することが可能です。 forwardタグには一つだけ属性があります:
- name - 使用するActionForwardの論理名です。
コレクションユーティリティ (iterate)
iterateタグは、指定されたコレクション内部の各要素に対して、 本体(body)を一度ずつ実行する役割を持ちます。 必須属性が1つあります:
- id - JSP内のpageスコープにあるbeanの名前です。 このbeanは、コレクションの繰り返しでの現在の要素を持ちます。
他の属性は、コレクションの繰り返しを柔軟に行うことを可能にします。使い方は:
- collection - 繰り返しの対象であるコレクションを評価する実行時表現です。
- 例:
<% java.util.Vector vector = new java.util.Vector(); vector.add(new Integer(12)); vector.add(new Integer(5)); %><logic:iterate id="myCollectionElement" collection="<%= vector %>"> myCollectionElementに対する処理 </logic:iterate>
- length - このページで処理されるべき(コレクション配下の)要素の最大数です。 これは、処理したい数値を整数で直接記入するか、 処理対象の数を表すjava.lang.Integer型の(いずれかのスコープにある) JSP beanの名前を記入します。 この属性が無い場合は、上限無く繰り返し処理が行われます。
- name - 繰り返しの処理対象のコレクションのJSP beanか(プロパティが指定されていない場合)、 または、コレクションを返すプロパティゲッターを持つJSP beanです(プロパティが指定されている場合)。
- 例:
<%
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"> myCollectionElementに対する処理 </logic:iterate>- offset - コレクション配下のどの要素から開始するかを指定する0オリジンのインデックスです。 これは、処理したい数値を整数で直接記入するか、 処理対象の数を表すjava.lang.Integer型の(いずれかのスコープにある) JSP beanの名前を記入します。 この属性がない場合は、0が指定されたもの(つまりコレクションの最初から)とします。
- property - 繰り返し処理対象のコレクションを返すゲッターを持つ、 nameによって指定されたJSPのプロパティの名前です。 property属性の文法は、「beanタグライブラリのユーザーズガイド」をご覧下さい。
- scope - nameプロパティで指定したbeanを検索するときのスコープです。 もし指定がない場合は"any scope"とみなします。指定可能な値は、 "page","request", "session", "application", または、"any scope"
です。- type - id属性で名前付けされたJSP beanとして展開される要素の完全修飾クラス名です。 type属性がない場合、型変換は行われません。
注意: コレクションの要素の実体は、このクラスと互換性がなくてはなりません。 もしない場合は、ClassCastExceptionが発生します。
- 例:
<% 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" type="java.lang.String"> 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>
|
||||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||