public class SqlAndTag extends CommonTagSupport
●形式:<og:and startKey="[and|or|…]" value="…" multi="[false|true]" /> ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) ●Tag定義: <og:and startKey 【TAG】SQL条件句の最初の演算子を指定します(初期値:and) value 【TAG】条件の値を セットします multi 【TAG】複数の引数に対して処理するかどうか[true/false]を設定します(初期値:false) separator 【TAG】multi アクション時の文字列を分割する項目区切り文字をセットします quotCheck 【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=true]) instrVals 【TAG】スペースで区切られた複数の値すべてを含む条件を作成します instrType 【TAG】instrValsで複数の値を条件にする際の方法を指定します(初期値:and) xssCheck 【TAG】リクエスト情報の HTMLTag開始/終了文字(><) 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_XSS_CHECK[=true]) caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true) caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true) debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) > ... Body ... </og:and> ●使用例 <og:query command="NEW"> select PN,YOBI,NMEN,HINM from XX01 <og:where> <og:and value="PN = '{@PN}'" /> <og:and value="YOBI like '{@YOBI}%'" /> </og:where> order by PN </og:query> ・検索条件が入力された時(PN=AAA , YOBI=BBB) 作成されるSQL文⇒select PN,YOBI,NMEN,HINM from XX01 where PN = 'AAA' and YOBI like 'BBB%' order by PN ・検索条件が片方入力されなかった時(PNがNULLのとき, YOBI=BBB) 作成されるSQL文⇒select PN,YOBI,NMEN,HINM from XX01 where YOBI like 'BBB%' order by PN ・検索条件が入力されなかった時(PNがNULL, YOBIがNULL) WHERE句がなくなる。 作成されるSQL文⇒select PN,YOBI,NMEN,HINM from XX01 order by PN 注意:WhereTagを使わない場合に、検索条件が入力されなかった場合は、下記のようになります。 select PN,YOBI,NMEN,HINM from XX01 where PN = '' and YOBI like '%' order by PN -------------------------------------------------------------------------------------------------------------- <og:query command="NEW"> select PN,YOBI,NMEN,HINM from XX01 where PN="11111" <og:where startKey="and"> <og:and value="YOBI in ({@YOBI})" multi="true" /> <og:and value="HINM like '{@HINM}%'" /> </og:where> order by PN </og:query> ・YOBI を複数選択し、in で検索する時(YOBI=AA,BB,CC を選択) 作成されるSQL文⇒select PN,YOBI,NMEN,HINM from XX01 where PN = '11111' and YOBI in ( 'AA','BB','CC' ) and HINM like 'BBB%' order by PN
bodyContent
id, pageContext
EVAL_BODY_BUFFERED, EVAL_BODY_TAG
EVAL_BODY_AGAIN
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
コンストラクタと説明 |
---|
SqlAndTag() |
修飾子とタイプ | メソッドと説明 |
---|---|
int |
doAfterBody()
Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
|
int |
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
|
int |
doStartTag()
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
|
protected String |
getRequestValue(String key)
リクエスト情報の文字列を取得します。
|
protected String |
getTagName()
タグの名称を、返します。
|
protected void |
release2()
タグリブオブジェクトをリリースします。
|
void |
setInstrType(String tp)
【TAG】instrValsで複数の値を条件にする際の方法を指定します(初期値:and)。
|
void |
setInstrVals(String val)
【TAG】スペースで区切られた複数の値すべてを含む条件を作成します。
|
void |
setMulti(String flag)
【TAG】複数の引数に対して処理するかどうか[true/false]を設定します(初期値:false)。
|
void |
setQuotCheck(String flag)
【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します
(初期値:USE_SQL_INJECTION_CHECK[=true])。
|
void |
setSeparator(String sepa)
【TAG】multi アクション時の文字列を分割する項目区切り文字をセットします。
|
void |
setStartKey(String skey)
【TAG】SQL条件句の最初の演算子を指定します(初期値:and)。
|
void |
setValue(String val)
【TAG】条件の値を セットします。
|
void |
setXssCheck(String flag)
【TAG】リクエスト情報の HTMLTag開始/終了文字(><) 存在チェックを実施するかどうか[true/false]を設定します
(初期値:USE_XSS_CHECK[=true])。
|
String |
toString()
このオブジェクトの文字列表現を返します。
|
add, add, addEventColumn, addEventColumn, check, check, commitTableObject, debugPrint, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getDataCondition, getDateFormat, getDBColumn, getDBFunctionName, getDocumentLink, getGUIInfo, getGUIInfoAttri, getHostName, getLabel, getLabelInterface, getLanguage, getLASTAttri, getLongLabel, getMsglbl, getNVLAttri, getObject, getParameterNames, getParameterRows, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getUser, getUserEditInfo, getUserInfo, isAjaxSubmitRequest, isDebug, isNoTransitionRequest, isNull, jspPrint, removeContextAttribute, removeObject, removeRequestAttribute, removeSessionAttribute, set, setAjaxSubmitRequest, setCaseKey, setCaseNN, setCaseNull, setCaseVal, setContextAttribute, setCookie, setDebug, setLanguage, setLbl, setNoTransitionRequest, setObject, setObject, setParameterNames, setParameterRows, setRequestAttribute, setRequestCacheData, setScope, setSessionAttribute, setUserInfo, startQueryTransaction, sys, sysBool, sysInt, useMainTrans, useQuotCheck, useTag, useXssCheck
doInitBody, getBodyContent, getPreviousOut, release, setBodyContent
findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getParent, setPageContext, setParent
public SqlAndTag()
public int doStartTag()
doStartTag
インタフェース内 Tag
doStartTag
クラス内 CommonTagSupport
4.0.0.0 (2006/12/05) BODY 部の値を value に使用する機能追加 |
4.0.0.0 (2005/08/31) useQuotCheck() によるSQLインジェクション対策 |
5.0.0.2 (2009/09/15) XSS対策 |
5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 |
public int doAfterBody()
doAfterBody
インタフェース内 IterationTag
doAfterBody
クラス内 CommonTagSupport
4.0.0.0 (2006/12/05) BODY 部の値を value に使用する機能追加 |
public int doEndTag()
doEndTag
インタフェース内 Tag
doEndTag
クラス内 CommonTagSupport
3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 |
3.8.8.1 (2007/01/06) makeInstrVals を加味する。 |
5.0.0.2 (2009/09/15) multi時のallNull対応 |
5.1.9.0 (2010/08/01) matchKey 、matchVal 対応 ⇒ 5.2.2.0 (2010/11/01) 廃止 |
5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 |
protected void release2()
release2
クラス内 CommonTagSupport
2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 |
3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 |
3.8.8.1 (2007/01/06) instrVals 属性追加 |
4.0.0.0 (2005/08/31) quotCheck 属性の追加 |
5.0.0.2 (2009/09/15) XSS対応 |
5.0.0.2 (2009/09/15) multi時のallNull対応 |
5.1.9.0 (2010/08/01) matchKey、matchVal 属性の追加 |
5.2.2.0 (2010/11/01) separator , isMatch 属性の追加 |
5.2.2.0 (2010/11/01) matchKey、matchVal 属性廃止(caseKey,caseVal属性を使用してください。) |
5.4.1.0 (2011/11/01) instrType属性追加 |
protected String getRequestValue(String key)
getRequestValue
クラス内 CommonTagSupport
key
- キー5.0.0.2 (2009/09/15) valuesの全NULL/空文字をisNull扱いにする |
5.3.8.0 (2011/08/01) Attribute等からも値が取得できるようにする。の対応時の特殊処理 |
public void setStartKey(String skey)
skey
- 条件句の最初の演算子value を連結する場合の頭に置かれる文字列で、where句の最初には表示されず、 それ以降について、表示されます。 (つまり、where VALUE1 and VALUE2 and VALUE3 … です。) startKey の初期値は、"and" です。
public void setValue(String val)
val
- 条件値条件値に、{@XXXX} 変数が含まれている場合、そのリクエスト値がない場合は、 このタグそのものがなにも出力しません。(つまり条件から消えます。) BODY 部に記述することが可能です。その場合は、条件属性になにも設定できません。
public void setInstrVals(String val)
val
- 複合条件作成のための設定値setInstrType(java.lang.String)
,
ColumnMarkerTag.setInstrVals( String )
通常、value="CLM LIKE 'ABC%'" という文字列を指定しますが、 value="CLM" instrVals="ABC DEF GHI" と指定すると、 value="CLM LIKE '%ABC%' AND CLM LIKE '%DEF%' AND CLM LIKE '%GHI%' " という文字列を作成します。 これは、instrVals に指定した引数に対して、スペース区切りで分割し、 前方の value に複数のAND検索を同時に実現できるように指定します 個別にLIKE検索項目を AND 連結する為、現れる場所に依存しません。 逆に、現れる順序を指定する場合は、ABC%DEF の様に指定可能です。 ただし、columnMarker の instrVals で、複数文字のマーカーを行う場合、 ABC%DEF という文字列は、オリジナルでないので、マークアップされません。 ※instrType属性の指定により条件の生成方法を変更することができます。 詳細については、instrType属性のドキュメントを参照下さい。
public void setInstrType(String tp)
tp
- 条件方法[and/or/in/notin]setInstrVals( String )
通常、instrValsに指定された値は、スペース区切りで分割した各値をLIKE条件としてand結合します。 しかし、instrType属性を変更することで、この条件式の生成方法を変更 することができます。 具体的には、以下の通りです。 ①instrTypeに"and"が指定されている場合(初期値) タグの記述 : value="CLM" instrVals="ABC DEF GHI" 生成文字列 : "( CLM LIKE '%ABC%' AND CLM LIKE '%DEF%' AND CLM LIKE '%GHI%' )" ②instrTypeに"or"が指定されている場合 タグの記述 : value="CLM" instrVals="ABC DEF GHI" 生成文字列 : "( CLM LIKE '%ABC%' OR CLM LIKE '%DEF%' OR CLM LIKE '%GHI%' )" ③instrTypeに"in"が指定されている場合 タグの記述 : value="CLM" instrVals="ABC DEF GHI" 生成文字列 : "( CLM LIKE 'ABC' OR CLM LIKE 'DEF5' OR CLM LIKE 'GHI' )" ④instrTypeに"notin"が指定されている場合 タグの記述 : value="CLM" instrVals="ABC DEF GHI" 生成文字列 : "( CLM NOT LIKE 'ABC' AND CLM NOT LIKE 'DEF5' AND CLM NOT LIKE 'GHI' )" ※この属性を指定しない場合は、①のLIKE条件でのand結合となります。 ※③④について、LIKE条件で%を自動付加しないことにより、画面からの入力値に応じて、 前方一致、後方一致、前後方一致の制御を行うことができます。
5.5.1.1 (2012/04/06) notin対応(コメント修正) |
public void setMulti(String flag)
flag
- マルチ変換 [true:する/それ以外:しないsetSeparator( String )
{@XXXX} 変数に、値が複数含まれている場合の処理を規定します。 multi="true" に設定すると、複数の引数は、'xx1','xx2','xx3', ・・・ という 形式に変換します。 where 条件で言うと、 "where PN in ( {@PN} )" という文字列に対して、 "where PN in ( 'xx1','xx2','xx3' )" を作成することになります。 初期値は、 false (マルチ変換しない) です。
public void setSeparator(String sepa)
sepa
- 項目区切り文字setMulti( String )
multi="true" の場合、複数のリクエストを連結して、 in 句で問合せを行う文字列を 作成しますが、separator を指定すると、さらに、separator で文字列を分割して、 in 句の引数を構築します。 具体的には、分割後の文字列が、複数の個々のリクエスト変数と同じ形式に加工されます。 この機能は、multi="true" を指定した場合のみ有効になります。 初期値は、null です。つまり、分割処理は行いません。
5.2.2.0 (2010/11/01) 新規追加 |
public void setQuotCheck(String flag)
flag
- クォーティションチェック [true:する/それ以外:しない]SystemData.USE_SQL_INJECTION_CHECK
SQLインジェクション対策の一つとして、暫定的ではありますが、SQLのパラメータに 渡す文字列にクォーティション(') を許さない設定にすれば、ある程度は防止できます。 数字タイプの引数には、 or 5=5 などのクォーティションを使用しないコードを埋めても、 数字チェックで検出可能です。文字タイプの場合は、必ず (')をはずして、 ' or 'A' like 'A のような形式になる為、(')チェックだけでも有効です。 (') が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 (初期値:システム定数のUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])。
4.0.0.0 (2005/08/31) 新規追加 |
public void setXssCheck(String flag)
flag
- XSSチェック [true:する/false:しない]SystemData.USE_XSS_CHECK
クロスサイトスクリプティング(XSS)対策の一環としてless/greater than signについてのチェックを行います。 (><) が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 (初期値:システム定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])。
5.0.0.2 (2009/09/15) 新規追加 |
protected String getTagName()
getTagName
クラス内 CommonTagSupport
CommonTagSupport.getDocumentLink()
4.0.0.0 (2005/01/31) 新規追加 |
public String toString()
toString
クラス内 CommonTagSupport
Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.