public class SqlAndTag extends CommonTagSupport
Where句を作成するための条件を指定します。 このタグのvalue 値に、{@XXXX} 変数が含まれている場合、そのリクエスト値が ない場合は、このタグそのものがなにも出力しません。(つまり条件から消えます。) startKeyは、value を連結する場合の頭に置かれる文字列で、where句の最初には表示されず、 それ以降について、表示されます。(つまり、where VALUE1 and VALUE2 and VALUE3 … です。) startKey の初期値は、"and" です。 multi は、{@XXXX} 変数に、値が複数含まれている場合の処理を規定します。 複数の値とは、同一nameでチェックボックス指定や、メニューでの複数指定した場合、 リクエストが配列で送られます。multi="true" とすると、'xx1','xx2','xx3', ・・・ という 形式に変換されます。 具体的には、"where PN in ( {@PN} )" という文字列に対して、 "where PN in ( 'xx1','xx2','xx3' )" を作成することができます。 multi の初期値は、"false" です。 SystemData の USE_SQL_INJECTION_CHECK が true か、quotCheck 属性が true の場合は、 SQLインジェクション対策用のシングルクォートチェックを行います。リクエスト引数に シングルクォート(')が含まれると、エラーになります。 同様にUSE_XSS_CHECKがtrueか、xssCheck属性がtrueの場合は、 クロスサイトススクリプティング(XSS)対策のためless/greater than signのチェックを行います。 各属性は、{@XXXX} 変数が使用できます。 これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。 つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。
●形式:<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 アクション時の文字列を分割する項目区切り文字をセットします instrVals 【TAG】スペースで区切られた複数の値すべてを含む条件を作成します instrType 【TAG】instrValsで複数の値を条件にする際の方法を指定します(初期値:and) range 【TAG】数値型カラムに対して、ハイフンで範囲指定をカンマに分解するかどうか[true/false]を設定します(初期値:false) 6.5.0.0 (2016/09/30) quotCheck 【TAG】リクエスト情報の シングルクォート(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=true]) xssCheck 【TAG】リクエスト情報の HTMLTag開始/終了文字(><) 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_XSS_CHECK[=true]) caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) caseIf 【TAG】指定の値が、true/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
BR, BUFFER_MIDDLE, CR
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 |
setRange(String flag)
【TAG】数値型カラムに対して、ハイフンで範囲指定をカンマに分解するかどうか[true/false]を設定します(初期値:false)。
|
void |
setSeparator(String sepa)
【TAG】multi アクション/instrVals 時の文字列を分割する項目区切り文字をセットします。
|
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, commitTableObject, debugPrint, doCatch, doFinally, get, getApplicationInfo, getAttributes, getBodyRawString, getBodyString, getContextAttribute, getContextPath, getCookie, getCSVParameter, getCSVParameter, getDataCondition, getDateFormat, getDBColumn, getDBFunctionName, getDocumentLink, getGUIInfo, getGUIInfoAttri, getHostName, getLabel, getLabelInterface, getLanguage, getLASTAttri, getLongLabel, getMsg, getMsglbl, getNVLAttri, getObject, getParameterNames, getParameterRows, getRequest, getRequestAttribute, getRequestCacheData, getRequestMethod, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getSumRequestValue, getTransaction, getUser, getUserEditInfo, getUserInfo, isAjaxSubmitRequest, isDebug, isNoTransitionRequest, isNull, jspPrint, makeUrl, removeContextAttribute, removeObject, removeRequestAttribute, removeSessionAttribute, set, setAjaxSubmitRequest, setCaseIf, 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()
6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. |
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 属性対応 |
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
public int doAfterBody()
doAfterBody
インタフェース内 IterationTag
doAfterBody
クラス内 CommonTagSupport
4.0.0.0 (2006/12/05) BODY 部の値を value に使用する機能追加 |
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
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属性追加 |
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
6.5.0.0 (2016/09/30) 数値型カラムの範囲指定(range)の追加。 |
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等からも値が取得できるようにする。の対応時の特殊処理 |
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
6.5.0.0 (2016/09/30) 数値型カラムの範囲指定(range)の追加。 |
public void setStartKey(String skey)
skey
- 条件句の最初の演算子value を連結する場合の頭に置かれる文字列で、where句の最初には表示されず、 それ以降について、表示されます。 (つまり、where VALUE1 and VALUE2 and VALUE3 … です。) startKey の初期値は、"and" です。
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
public void setValue(String val)
val
- 条件値条件値に、{@XXXX} 変数が含まれている場合、そのリクエスト値がない場合は、 このタグそのものがなにも出力しません。(つまり条件から消えます。) BODY 部に記述することが可能です。その場合は、条件属性になにも設定できません。
public void setInstrVals(String val)
val
- 複合条件作成のための設定値setInstrType(java.lang.String)
,
ColumnMarkerTag.setInstrVals( String )
value="CLM" instrVals="ABC DEF GHI" と指定すると、 value="CLM LIKE '%ABC%' AND CLM LIKE '%DEF%' AND CLM LIKE '%GHI%' " という文字列を作成します。 通常の、value="CLM LIKE '%ABC%DEF%'" の指定方法では、ABCとDEFの 順番が固定化されますが、instrVals を用いた方法では、個別指定が可能です。 ※ 6.4.3.2 (2016/02/19) これは、instrVals に指定した引数に対して、スペース、カンマ、タブ、改行の どれかで区切ります。個別に指定する場合は、separatorに設定します。 これは、instrVals.split(separator) で分割するので、正規表現が使用可能です。 分割後に、前方の value に複数のAND検索(instrTypeで変更可)を同時に指定できる ため、現れる場所に依存しません。 // * これは、instrVals に指定した引数に対して、スペース区切り(separatorで変更可) // * で分割し、前方の value に複数のAND検索(instrTypeで変更可)を同時に指定できる // * ため、現れる場所に依存しません。 逆に、現れる順序を指定する場合は、ABC%DEF の様に指定可能です。 ただし、columnMarker の instrVals で、複数文字のマーカーを行う場合、 ABC%DEF という文字列は、オリジナルでないので、マークアップされません。 ※instrType属性の指定により条件の生成方法を変更することができます。 詳細については、instrType属性のドキュメントを参照下さい。
6.4.3.2 (2016/02/19) 区切り文字を、スペース、カンマ、タブ、改行にします。 |
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' )" 生成文字列 : "CLM in ('ABC','DEF5','GHI')" ④instrTypeに"notin"が指定されている場合 タグの記述 : value="CLM" instrVals="ABC DEF GHI" // * 生成文字列 : "( CLM NOT LIKE 'ABC' AND CLM NOT LIKE 'DEF5' AND CLM NOT LIKE 'GHI' )" 生成文字列 : "CLM not in ('ABC','DEF5','GHI')" ※この属性を指定しない場合は、①のLIKE条件でのand結合となります。 ※③④について、LIKE条件で%を自動付加しないことにより、画面からの入力値に応じて、 前方一致、後方一致、前後方一致の制御を行うことができます。
5.5.1.1 (2012/04/06) notin対応(コメント修正) |
6.1.1.0 (2015/01/17) 初期値指定のコーディングミス修正 |
6.7.3.0 (2017/01/27) in とnot in のコーディングを、変更 |
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 (マルチ変換しない) です。
6.1.1.0 (2015/01/17) localReq変数を使う事で、RequestParameter処理を制御します。 |
public void setRange(String flag)
flag
- 範囲変換 [true:する/それ以外:しない]{@XXXX} 変数に、"1,3,4-8" のような指定を行うと、"1,3,4,5,6,7,8" に変換します。 これは、数値型カラムの範囲指定を、ハイフンで行うことが出来る機能です。 ハイフン以外は、カンマで区切って、普通の数値として指定できます。 where 条件で言うと、 "where GOKI in ( {@GOKI} )" という文字列に対して、 "where GOKI in ( 1,3,4,5,6,7,8 )" を作成することになります。 初期値は、 false (範囲変換しない) です。 これは、数値カラムの範囲指定で、対象は自然数なので、小数や、マイナス、増加ステップが1以外、 マイナスステップは扱えません。 ちなみに、指定を数値タイプのカラムを使用すると、カンマを、自動削除してしまいますので、文字カラムを リクエスト変数に使用してください。
6.5.0.0 (2016/09/30) 数値型カラムの範囲指定(range)の追加。 |
public void setSeparator(String sepa)
sepa
- 項目区切り文字(正規表現)setMulti( String )
multi="true" の場合、複数のリクエストを連結して、in 句で問合せを行う文字列を 作成しますが、separator を指定すると、さらに、separator で文字列を分割して、 in 句の引数を構築します。 これは、instrVals を指定した場合にも、同様に分解します。 具体的には、分割後の文字列が、複数の個々のリクエスト変数と同じ形式に加工されます。 String#split( separator ) で、分解するため、正規表現が使用できます。 何も指定しない場合は、multi アクション時は、分割処理は行いません。 instrVals 時は、スペースで分解処理します。
5.2.2.0 (2010/11/01) 新規追加 |
6.1.1.0 (2015/01/17) コメント修正。separatorは、正規表現が使用できます。 |
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[=true])。
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[=true])。
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.