|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjavax.servlet.jsp.tagext.TagSupport
jp.terasoluna.fw.ex.web.taglib.ExtractTag
public class ExtractTag
動的コードリストから、指定されたキー値を持つオブジェクトを抽出するカスタムタグ。
(動的コードリストとは、ページスコープやリクエストスコープ、セッションスコープ、アクションフォーム内に保存された
同型のオブジェクトの集合を表す(例えば「部署」を表すJavaBeanのListなど)。
通常、セレクトボックスやチェックボックス、ラジオボタン等の限られた選択肢から値を選択する場合に用いる。)
動的コードリストから抽出したオブジェクトは、任意のスコープのbeanとして定義したり、特定のプロパティを表示することができる。
定義するか表示するかは、id属性を設定するか否かで決まる。定義と表示を同時に行うことはない。
・id属性を設定した場合、「定義」として動作する。任意のスコープのbean、および、開始タグ以降で有効なObject型のスクリプティング変数を定義する。
・id属性を設定しなかった場合、「表示」として動作する。このとき、表示したいプロパティをwriteProperty属性で指定しなければならない。
このタグを利用するには、以下の4項目を設定する。
・動的コードリスト (collection属性 / collectionName属性 + collectionProperty属性 + collectionScope属性)
・キープロパティ(抽出時に比較するプロパティ) (keyProperty属性)
・抽出条件(キープロパティと比較される値、あるいは、値のCollectionや配列) (condition属性 / conditionName属性 + conditionProperty属性 + conditionScope属性)
・定義もしくは表示に関する情報 (id属性 + toScope属性 / writeProperty属性 + filter属性)
※上記括弧内の「/」の左右に分けられた属性は、排他的に利用する。
詳細は以下の通り。
特記事項:
定義時: ・「抽出条件」に特定の値を渡した場合、抽出結果は1つのJavaBeanとなる。 ・「抽出条件」に値のCollectionや配列を渡した場合、抽出結果はJavaBeanのListとなる。 表示時: ・「抽出条件」には、特定の値を渡すことしかできない。(Collectionや配列以外でなければならない。) 動的コードリスト内の各JavaBeanのキープロパティの値について: ・型は任意であるが、抽出条件に使用する値と同じ型でなければならない(厳密には、equalsが成立すればよい)。 なお、アクションフォーム上の、リクエストパラメータの値が入るプロパティは、 通常Stringやその配列で定義するため、キープロパティの値もString型にした方が相性が良い。 ・キープロパティの値がnullの場合、キープロパティの値が空文字列(長さ0のString)であるものとして処理する。 これは、以下の特性を考慮したものである。 ・null値をhtml:radioやhtml:multiboxで出力すると、空文字列扱いとなる ・アクションフォーム上の配列プロパティをリセット機能でリセットした場合、配列要素がnullになる ただし、null値を扱う必要が無い限り、null値は使用しないことを推奨する。 動的コードリスト内の各JavaBeanの出力プロパティの値について(writeProperty属性使用時): ・型は任意である。toStringの結果が表示される。 ・出力プロパティの値がnullの場合、非表示(空文字列の出力と同義)となる。 動的コードリストとして使用できる型: ・配列 ・java.util.Collection(java.util.ArrayList等) ・java.util.Iterator ・java.util.Enumeration ・java.util.Map(java.util.LinkedHashMap等) ※配列、Collection、Iterator、Enumerationの各要素は、JavaBeanである。 ※動的コードリストの型がMapの場合、Map.EntryがJavaBeanの代わりとなる。 よって、keyProperty属性やwriteProperty属性には、"key"や"value"が使用できる。 なお、Mapのkeyを元にMapのvalueを表示したい場合(keyProperty="key" writeProperty="value"となる場合)は、 このタグを使用せず、bean:writeタグ等で直接アクセスして表示すればよい。
性能を考慮した使用上の注意:
このタグは、動的コードリスト内を順検索してJavaBeanを抽出する。
そのため、使用方法を誤ると、非効率な検索や無駄な検索をしてしまう。
以下が、性能アンチパターンとその解決方法(推奨パターン)である。
<logic:iterate name="_SampleForm" property="selectedDeptCodes" id="selectedDeptCode"> <logic:present name="selectedDeptCode"> <tr> <td> <tl:extract collectionName="_SampleForm" collectionProperty="deptList" keyProperty="deptCode" conditionName="selectedDeptCode" writeProperty="deptName"/> </td> </tr> </logic:present> </logic:iterate>「抽出条件」の数だけ、動的コードリストの順検索を行ってしまうため、非効率。
<tl:extract collectionName="_SampleForm" collectionProperty="deptList" keyProperty="deptCode" conditionName="_SampleForm" conditionProperty="selectedDeptCodes" id="selectedDeptList"/> <logic:iterate name="selectedDeptList" id="selectedDept"> <tr> <td><bean:write name="selectedDept" property="deptName"/></td> </tr> </logic:iterate>動的コードリスト内部の全JavaBeanに1回ずつアクセスし、「抽出条件」と照合する。
<td> <tl:extract collectionName="_SampleForm" collectionProperty="deptList" keyProperty="deptCode" conditionName="_SampleForm" conditionProperty="selectedDeptCode" writeProperty="deptName"/> </td> <td> <tl:extract collectionName="_SampleForm" collectionProperty="deptList" keyProperty="deptCode" conditionName="_SampleForm" conditionProperty="selectedDeptCode" writeProperty="deptShortName"/> </td>表示したいプロパティの数だけ、動的コードリストの順検索を行ってしまうため、非効率。
<tl:extract collectionName="_SampleForm" collectionProperty="deptList" keyProperty="deptCode" conditionName="_SampleForm" conditionProperty="selectedDeptCode" id="selectedDept"/> <td><bean:write name="selectedDept" property="deptName" ignore="true"/></td> <td><bean:write name="selectedDept" property="deptShortName" ignore="true"/></td>動的コードリストの順検索は1回だけ行う。
TagSupport
,
直列化された形式フィールドの概要 |
---|
クラス javax.servlet.jsp.tagext.TagSupport から継承されたフィールド |
---|
pageContext |
インタフェース javax.servlet.jsp.tagext.IterationTag から継承されたフィールド |
---|
EVAL_BODY_AGAIN |
インタフェース javax.servlet.jsp.tagext.Tag から継承されたフィールド |
---|
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE |
コンストラクタの概要 | |
---|---|
ExtractTag()
|
メソッドの概要 | |
---|---|
int |
doStartTag()
動的コードリストから、指定されたキー値を持つオブジェクトを抽出する。 |
Object |
getCollection()
動的コードリストオブジェクトを取得する。 |
String |
getCollectionName()
動的コードリストオブジェクト、またはそれを含むJavaBeanの、スコープ上の名前を取得する。 |
String |
getCollectionProperty()
動的コードリストオブジェクトが格納されたプロパティを取得する。 |
String |
getCollectionScope()
動的コードリストを検索するスコープを取得する。 |
Object |
getCondition()
抽出条件オブジェクトを取得する。 |
String |
getConditionName()
抽出条件オブジェクト、またはそれを含むJavaBeanの、スコープ上の名前を取得する。 |
String |
getConditionProperty()
抽出条件オブジェクトが格納されたプロパティを取得する。 |
String |
getConditionScope()
抽出条件オブジェクトを検索するスコープを取得する。 |
String |
getId()
抽出結果オブジェクトを定義する際の名前を取得する。 |
protected Iterator<?> |
getIterator(Object collection)
動的コードリストのイテレータを返す。 |
String |
getKeyProperty()
キープロパティ(抽出条件と比較するプロパティ)を取得する。 |
String |
getToScope()
抽出結果オブジェクトを定義するスコープを取得する。 |
String |
getWriteProperty()
出力プロパティを取得する。 |
boolean |
isFilter()
出力した文字列をHTMLエスケープするか否かを取得する。 |
void |
release()
すべてのアロケートされた資源を解放する。 |
void |
setCollection(Object collection)
動的コードリストオブジェクトを設定する。 |
void |
setCollectionName(String collectionName)
動的コードリストオブジェクト、またはそれを含むJavaBeanの、スコープ上の名前を設定する。 |
void |
setCollectionProperty(String collectionProperty)
動的コードリストオブジェクトが格納されたプロパティを設定する。 |
void |
setCollectionScope(String collectionScope)
動的コードリストを検索するスコープを設定する。 |
void |
setCondition(Object condition)
抽出条件オブジェクトを設定する。 |
void |
setConditionName(String conditionName)
抽出条件オブジェクト、またはそれを含むJavaBeanの、スコープ上の名前を設定する。 |
void |
setConditionProperty(String conditionProperty)
抽出条件オブジェクトが格納されたプロパティを設定する。 |
void |
setConditionScope(String conditionScope)
抽出条件オブジェクトを検索するスコープを設定する。 |
void |
setFilter(boolean filter)
出力した文字列をHTMLエスケープするか否かを設定する。 |
void |
setId(String id)
抽出結果オブジェクトを定義する際の名前を設定する。 |
void |
setKeyProperty(String keyProperty)
キープロパティ(抽出条件と比較するプロパティ)を設定する。 |
void |
setToScope(String toScope)
抽出結果オブジェクトを定義するスコープを設定する。 |
void |
setWriteProperty(String writeProperty)
出力プロパティを設定する。 |
クラス javax.servlet.jsp.tagext.TagSupport から継承されたメソッド |
---|
doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public ExtractTag()
メソッドの詳細 |
---|
public Object getCollection()
public void setCollection(Object collection)
collection
- 動的コードリストオブジェクトpublic String getCollectionName()
public void setCollectionName(String collectionName)
collectionName
- 動的コードリストオブジェクト、またはそれを含むJavaBeanの、スコープ上の名前public String getCollectionProperty()
public void setCollectionProperty(String collectionProperty)
collectionProperty
- 動的コードリストオブジェクトが格納されたプロパティpublic String getCollectionScope()
public void setCollectionScope(String collectionScope)
collectionScope
- 動的コードリストを検索するスコープpublic String getKeyProperty()
public void setKeyProperty(String keyProperty)
keyProperty
- キープロパティ(抽出条件と比較するプロパティ)public Object getCondition()
public void setCondition(Object condition)
condition
- 抽出条件オブジェクトpublic String getConditionName()
public void setConditionName(String conditionName)
conditionName
- 抽出条件オブジェクト、またはそれを含むJavaBeanの、スコープ上の名前public String getConditionProperty()
public void setConditionProperty(String conditionProperty)
conditionProperty
- 抽出条件オブジェクトが格納されたプロパティpublic String getConditionScope()
public void setConditionScope(String conditionScope)
conditionScope
- 抽出条件オブジェクトを検索するスコープpublic String getId()
javax.servlet.jsp.tagext.TagSupport
内の getId
public void setId(String id)
javax.servlet.jsp.tagext.TagSupport
内の setId
id
- 抽出結果オブジェクトを定義する際の名前public String getToScope()
public void setToScope(String toScope)
toScope
- 抽出結果オブジェクトを定義するスコープpublic String getWriteProperty()
public void setWriteProperty(String writeProperty)
writeProperty
- 出力プロパティpublic boolean isFilter()
public void setFilter(boolean filter)
filter
- 出力した文字列をHTMLエスケープするか否かpublic int doStartTag() throws javax.servlet.jsp.JspException
id属性が設定されていれば、結果のオブジェクトをbeanとして定義し、 id属性が設定されていなければ、結果のオブジェクトの、writePropertyで指定されたプロパティを表示する。
javax.servlet.jsp.tagext.Tag
内の doStartTag
javax.servlet.jsp.tagext.TagSupport
内の doStartTag
SKIP_BODY
javax.servlet.jsp.JspException
- JSP例外TagSupport.doStartTag()
protected Iterator<?> getIterator(Object collection) throws javax.servlet.jsp.JspException
collection
- 動的コードリスト
javax.servlet.jsp.JspException
- 動的コードリストの型に対応するイテレータが取得できない場合public void release()
すべてのアロケートされた資源を解放する。
javax.servlet.jsp.tagext.Tag
内の release
javax.servlet.jsp.tagext.TagSupport
内の release
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |