public class TableUpdateParamTag extends CommonTagSupport
TableUpdateTag にパラメーターを渡す為のタグクラスです。 汎用的なデータベース登録処理を行えるタグ tableUpdate タグを新規作成します。 これは、具体的なSLQを作成する tableUpdateParam タグと組み合わせて使用できます。 tableUpdate タグは、queryType に JDBCTableUpdate を指定します。基本的にこれだけ です。tableUpdateParam では、sqlType に、INSERT,COPY,UPDATE,MODIFY,DELETE の どれかを指定する事で、SQL文のタイプを指定します。COPY,MODIFY は command と 関連を持たす為に追加しているタイプで、INSERTやUPDATE と同じ処理を行います。 tableUpdateParam の table には、作成したい SQL のテーブルを指定します。 where 属性は、検索結果の DBTableModel の更新時に使用する条件を指定します。
●形式:<og:tableUpdate command="{@command}" queryType="JDBCTableUpdate" > <og:tableUpdateParam sqlType = "{@sqlType}" // INSERT,COPY,UPDATE,MODIFY,DELETE table = "{@TABLE_NAME}" // 処理対象のテーブル名 names = "{@names}" // 処理対象のカラム名 omitNames = "{@omitNames}" // 処理対象外のカラム名 where = "{@where}" // 処理対象を特定するキー whereNames = "{@whereNames}" // 処理対象を特定するキー条件(where句)をCSV形式 constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 asNames = "{@asNames}" // 別名を付けたカラム名(select A as B from TBL の B を指定) orgNames = "{@orgNames}" // tableの実際のカラム名(select A as B from TBL の A を指定) funcKeys = "{@funcKeys}" // 関数等を設定するカラム名 funcVals = "{@funcVals}" // 関数等の設定値 logicalDelete = "{@logicalDelete}" // sqlTypeがDELETEの場合にもUPDATE文を発行 /> </og:tableUpdate> ●body:なし ●Tag定義: <og:tableUpdateParam sqlType ○【TAG】BODY部に書かれている SQLタイプを指定します(必須) table ○【TAG】処理対象のテーブル名を指定します(必須) names 【TAG】処理対象のカラム名をCSV形式で複数指定します omitNames 【TAG】処理対象外のカラム名をCSV形式で複数指定します where 【TAG】処理対象を特定するキー条件(where句)を指定します whereNames 【TAG】処理対象を特定するキー条件(where句)をCSV形式で複数指定します constKeys 【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します constVals 【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します funcKeys 【TAG】関数等を設定するカラム名をCSV形式で複数指定します funcVals 【TAG】関数等の設定値をCSV形式で複数指定します asNames 【TAG】別名を付けたカラム名(select A as B from TBL の B を指定)をCSV形式で複数指定します orgNames 【TAG】tableの実際のカラム名(select A as B from TBL の A を指定)をCSV形式で複数指定します quotCheck 【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_SQL_INJECTION_CHECK[=true]) constObjKey 【TAG】固定情報カラムの処理オブジェクトを特定するキーを設定します(初期値:SYSTEM_ID) logicalDelete 【TAG】sqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します(初期値:false) debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) /> ●使用例 ・【entry.jsp】 <og:tableUpdate command="{@command}" queryType="JDBCTableUpdate" > <og:tableUpdateParam sqlType = "{@sqlType}" table = "{@MEM.TABLE_NAME}" where = "ROWID = [ROWID]" /> </og:tableUpdate>
3.8.8.0 (2007/12/22) 新規作成 |
4.1.2.0 (2008/03/12) 実装の大幅な修正 |
修飾子とタイプ | フィールドと説明 |
---|---|
static String |
SQL_TYPE
sqlType属性に設定できる値 "|INSERT|COPY|UPDATE|MODIFY|DELETE|"
|
bodyContent
id, pageContext
EVAL_BODY_BUFFERED, EVAL_BODY_TAG
EVAL_BODY_AGAIN
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
コンストラクタと説明 |
---|
TableUpdateParamTag() |
修飾子とタイプ | メソッドと説明 |
---|---|
int |
doEndTag()
Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
|
int |
doStartTag()
Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
|
protected void |
release2()
タグリブオブジェクトをリリースします。
|
void |
setAsNames(String keys)
【TAG】別名を付けたカラム名(select A as B from TBL の B を指定)をCSV形式で複数指定します。
|
void |
setConstKeys(String keys)
【TAG】設定値を固定値と置き換える対象となるカラム名をCSV形式で複数指定します。
|
void |
setConstObjKey(String key)
【TAG】固定情報カラムの処理オブジェクトを特定するキーを設定します(初期値:SYSTEM_ID)。
|
void |
setConstVals(String vals)
【TAG】設定値を固定値と置き換える対象となる設定値をCSV形式で複数指定します。
|
void |
setFuncKeys(String keys)
【TAG】関数等を設定するカラム名をCSV形式で複数指定します。
|
void |
setFuncVals(String vals)
【TAG】関数等の設定値をCSV形式で複数指定します。
|
void |
setLogicalDelete(String flg)
【TAG】sqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します(初期値:false)。
|
void |
setNames(String nms)
【TAG】処理対象のカラム名をCSV形式で複数指定します。
|
void |
setOmitNames(String nms)
【TAG】処理対象外のカラム名をCSV形式で複数指定します。
|
void |
setOrgNames(String keys)
【TAG】tableの実際のカラム名(select A as B from TBL の A を指定)をCSV形式で複数指定します。
|
void |
setQuotCheck(String flag)
【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します
(初期値:USE_SQL_INJECTION_CHECK[=true])。
|
void |
setSqlType(String type)
【TAG】BODY部に書かれている SQLタイプを指定します。
|
void |
setTable(String tbl)
【TAG】処理対象のテーブル名を指定します。
|
void |
setWhere(String wr)
【TAG】処理対象を特定するキー条件(where句)を指定します。
|
void |
setWhereNames(String wrnm)
【TAG】処理対象を特定するキー条件(where句)をCSV形式で複数指定します。
|
String |
toString()
このオブジェクトの文字列表現を返します。
|
add, add, addEventColumn, addEventColumn, check, check, commitTableObject, debugPrint, doAfterBody, 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, getRequestParameter, getRequestParameterValues, getRequestValue, getRequestValue, getRequestValues, getReservedParameter, getReservedValue, getResource, getSanitizedBodyString, getScope, getSessionAttribute, getTagName, getUser, 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 int doStartTag()
doStartTag
インタフェース内 Tag
doStartTag
クラス内 CommonTagSupport
5.5.1.9 (2012/04/19) エラーチェックを先に行います。 |
public int doEndTag()
doEndTag
インタフェース内 Tag
doEndTag
クラス内 CommonTagSupport
4.3.7.0 (2009/06/01) 論理削除対応 |
protected void release2()
release2
クラス内 CommonTagSupport
4.3.7.0 (2009/06/01) logicalDelete属性追加 |
5.5.1.9 (2012/04/19) asNames、orgNames、funcKeys、funcVals属性追加 |
5.5.8.5 (2012/11/27) 処理対象を特定するCSV形式のカラム名 |
public void setSqlType(String type)
type
- BODY部に書かれている SQL タイプSQLタイプは、INSERT,COPY,UPDATE,MODIFY,DELETE の中から指定する 必要があります。これらは、内部に書かれるSQLの形式を指定するのに使用します。 内部処理は、DBTableModelの改廃コード(A,C,D)に対して使用される SQL を選択する場合の情報に使用されます。 なお、COPY と MODIFY は、command で指定できる簡易機能として用意しています。 上位の TableUpdateTag の sqlType 属性 と同じsqlType 属性の場合のみ、SQL文を 合成・出力します。(上位のsqlTypeがnullの場合は、無条件実行します。) 指定のタイプが、異なる場合は、なにも処理を行いません。
public void setTable(String tbl)
tbl
- テーブル名setNames( String )
,
setWhere( String )
,
setSqlType( String )
テーブル名を指定することで、sqlTypeに応じた QUERYを生成することが出来ます。 生成する場合のカラムを特定する場合は、names 属性で指定できます。 また、WHERE条件は、where属性で指定します。
public void setNames(String nms)
nms
- カラム名(CSV形式)setTable( String )
,
setOmitNames( String )
生成するQUERYのカラム名をカンマ区切り文字(CSV)で複数指定します。 指定がない場合は、DBTableModel の全カラム(※)を使用して、QUERYを構築します。 一般に、テーブル結合してDBTableModelを構築した場合は、登録すべきカラムを 指定する必要があります。 (※)正確には、DBTableModel の全カラムのうち、ROWID,ROWNUM,WRITABLE カラムは 無視します。 分解方法は、通常のパラメータ取得後に、CSV分解します。
3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSV分解に戻します。 |
public void setOmitNames(String nms)
nms
- カラム名(CSV形式)setTable( String )
,
setNames( String )
生成するQUERYのカラム名に指定しないカラム名をカンマ区切り文字(CSV)で複数指定します。 指定がない場合は、DBTableModel の全カラム(※)を使用して、QUERYを構築します。 テーブル結合などで、処理したくないカラム数の方が少ない場合に、names ですべてを 指定するより少ない記述ですみます。 (※)正確には、DBTableModel の全カラムのうち、ROWID,ROWNUM,WRITABLE カラムは 無視します。
public void setWhere(String wr)
wr
- 検索条件(where句)生成するQUERYのwhere 句を指定します。通常の WHERE 句の書き方と同じで、 DBTableModelの値を割り当てたい箇所に[カラム名] を記述します。 文字列の場合、設定値をセットするときに、シングルコーテーションを 使用しますが、[カラム名]で指定する場合は、その前後に、(')シングル コーテーションは、不要です。 {@XXXX}変数を使用する場合は、パース時に固定文字に置き換えられる為、 文字列指定時の(')シングルコーテーションが必要になります。 ※ 5.5.8.5 (2012/11/27) whereNames 属性と併用した場合は、where が、and を付けて、文字列結合されます。 例:FGJ='1' and CLM=[CLM] and SYSTEM_ID in ([SYSID],'**') and KBSAKU='{@KBSAKU}'
public void setWhereNames(String wrnm)
wrnm
- 検索条件(where句)作成のためのカラム名(CSV形式)生成するQUERYのwhere 句を指定する方法として、複数のカラム名をCSV指定し、内部で KEY=[KEY] 文字列を作成します。 ここでは、カラム名は、データベースのカラム名と同じで、かつ、DBTableModel にも 同じカラムのデータが存在していること、という条件付きとします。 また、where 条件との併用を行いますが、こちらの条件が先に使用され、where 条件は、 and を付けて、文字列結合されます。 例: CLM,SYSTEM_ID,KBSAKU ⇒ CLM=[CLM] and SYSTEM_ID=[SYSTEM_ID] and KBSAKU=[KBSAKU]
5.5.8.5 (2012/11/27) 新規追加 |
public void setConstKeys(String keys)
keys
- カラム名(CSV形式)setConstVals( String )
names 属性のカラムや table 属性より、QUERYを作成して、DBTableModelの値を 割り当てる場合、DBTableModelの値ではなく、外部から指定した固定値を 割り当てたい場合に、そのカラム名をカンマ区切り文字(CSV)で複数指定します。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
public void setConstVals(String vals)
vals
- 設定値(CSV形式)setConstKeys( String )
names 属性のカラムや table 属性より、QUERYを作成して、DBTableModelの 値を割り当てる場合、DBTableModelの値ではなく、外部から指定した固定値を 割り当てたい場合に、そのカラム名に対応する設定値をカンマ区切り文字(CSV)で 複数指定します。ここで指定する設定値は、constKeys 属性と対応させます。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
public void setFuncKeys(String keys)
keys
- カラム名(CSV形式)setFuncVals( String )
constVals 属性で設定する値は、必ずシングルクオートが付与されます。 その場合、関数などを設定したい場合でも、文字列として設定しようとします。 ここで指定するカラム名(funcKeys)自身は、constKeys と同じ書式です。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
5.5.1.9 (2012/04/19) 新規追加 |
public void setFuncVals(String vals)
vals
- 設定値(CSV形式)setFuncKeys( String )
funcKeys 属性に対応する 関数などの設定値を割り当てます。 constVals 属性との違いは、funcVals の設定値は、そのままの形で、SQL文の 構築に使われます。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
5.5.1.9 (2012/04/19) 新規追加 |
public void setAsNames(String keys)
keys
- カラム名(CSV形式)setOrgNames( String )
SELECT 文を記述したとき、別名を付けていたり、SELECTしたテーブルと別のテーブルに DBTableModelの値を書き込む場合、DBTableModel の持っているカラム名と、実際に 書き込むカラム名が異なります。そのようなケースに、元の別名カラムを指定します。 orgNames属性の並び順と、asNames属性の並び順を合わせておく必要があります。 このカラム名は、DBTableModel には持っているが、テーブル側には持っていない値 なので、内部的に omitNames 属性に値を設定します。利用者は、omitNames に 書き込む必要はありません。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
5.5.1.9 (2012/04/19) 新規追加 |
public void setOrgNames(String keys)
keys
- カラム名(CSV形式)setAsNames( String )
SELECT 文を記述したとき、別名を付けていたり、SELECTしたテーブルと別のテーブルに DBTableModelの値を書き込む場合、DBTableModel の持っているカラム名と、実際に 書き込むカラム名が異なります。そのようなケースに、テーブルの実カラムを指定します。 orgNames属性の並び順と、asNames属性の並び順を合わせておく必要があります。 このカラム名は、DBTableModel には持っていませんが、テーブル側には持っている値 なので、このカラム名で、SQL文を構築します。 UPDATE TBL SET A=[B] WHERE … となります。 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
5.5.1.9 (2012/04/19) 新規追加 |
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])。
public void setConstObjKey(String key)
key
- 固定情報カラムの処理オブジェクトを特定するキー固定情報カラム をシステム単位にJavaクラスで管理できます。 そのクラスオブジェクトは、org.opengion.hayabusa.db.DBConstValue インターフェースを 継承した、plugin クラスになります。 そのクラスを特定するキーワードを指定します。 初期値は、SYSTEM_ID でシステム単位にクラスを作成します。 もし、他のシステムと共通の場合は、継承だけさせることも可能です。 対応したDBConstValueクラスがプラグインとして存在しない場合は、 システムリソースのDEFAULT_CONST_CLASSで指定されたクラスが利用されます。 初期値は、SYSTEM_ID です。
public void setLogicalDelete(String flg)
flg
- 論理削除(UPDATE)を行うかどうかsqlType="DELETE"の場合に論理削除(UPDATE)を行うかどうかを指定します。 trueが指定された場合は、DELETE文ではなく、UPDATE文が発行されます。 falseが指定された場合は、DELETE文が発行されます。 さらに論理削除を行う場合、org.opengion.hayabusa.db.DBConstValue インターフェースに 定義されている、getLogicalDeleteKeys()及びgetLogicalDeleteValsを実装することで、 論理削除する際のフラグの更新方法を統一的に管理することが可能になります。 初期値は、false(物理削除する)です
public String toString()
toString
クラス内 CommonTagSupport
Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.