001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.db.Query; 019 020import static org.opengion.fukurou.util.StringUtil.nval ; 021 022import java.util.ArrayList; 023import java.util.Enumeration; 024 025/** 026 * 検索結果の DBTableModel を使用せず、直接エントリーデータを登録するタグです。 027 * 028 * このオブジェクトに、 dbid を与えることにより、dbid に対応した 029 * Queryオブジェクト(のサブクラスのオブジェクト)が作成されます。 030 * 031 * ※ このタグは、Transaction タグの対象です。 032 * 033 * @og.formSample 034 * ●形式: 035 * <og:entryQuery 036 * queryType = "JDBCKeyEntry" 037 * command = "{@command}" > 038 * { call DYNAMIC_PKG.DYNAMIC_TEST( ?,?,?,? ) } 039 * </og:query> 040 * 041 * queryType : Queryオブジェクトを作成する時のキー(オプション) 042 * QueryFactory参照 043 * command : 処理コマンド ( NEWのみ )(オプション) 044 * skipRowCount : データの読み始めの初期値を指定(オプション) 045 * maxRowCount : データの最大読み込み件数を指定(オプション) 046 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 047 * 048 * ●Tag定義: 049 * <og:entryQuery 050 * queryType ○【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCKeyEntry})(必須)。 051 * command 【TAG】コマンド (NEW,RENEW)をセットします(PlsqlUpdateTag,UpdateTag の場合は、ENTRY) 052 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session) 053 * maxRowCount 【TAG】(通常は使いません)データの最大読み込み件数を指定します (初期値:DB_MAX_ROW_COUNT[=1000]) 054 * skipRowCount 【TAG】(通常は使いません)データの読み始めの初期値を指定します 055 * displayMsg 【TAG】検索結果を画面上に表示するメッセージリソースIDを指定します (初期値:VIEW_DISPLAY_MSG[=]) 056 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした]) 057 * names 【TAG】PL/SQLを利用する場合の引数にセットすべき データの名称をCSV形式で複数指定します 058 * tableId 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 059 * dbid 【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します 060 * useSLabel 【TAG】7.0.7.0 (2019/12/13) エラーメッセージにSLABELを利用するかどうか[true/false]を指定します(初期値:false) 061 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 062 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 063 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 064 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 065 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 066 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 067 * > ... Body ... 068 * </og:entryQuery> 069 * 070 * ●使用例 071 * 例1) 072 * <table><tr><og:input name="PN" value="{@PN}" /></tr> 073 * <tr><og:input name="CD" value="{@CD}" /></tr> 074 * </table> 075 * 076 * 例2) 077 * <table><tr><og:input name="PN" value="{@PN}" >部品入力フィールド</og:input></tr> 078 * <tr><og:input name="CD" value="{@CD}" >コードフィールド</og:input></tr> 079 * </table> 080 * 081 * BODY 部分は、無視されます。コメント等に使用できます。 082 * HTMLファイルには、コメント部分は出力されません。 083 * 084 * @og.group DB登録 085 * 086 * @version 4.0 087 * @author Kazuhiko Hasegawa 088 * @since JDK5.0, 089 */ 090public class EntryQueryTag extends QueryTag { 091 /** このプログラムのVERSION文字列を設定します。 {@value} */ 092 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 093 private static final long serialVersionUID = 642020160129L ; 094 095 /** 096 * デフォルトコンストラクター 097 * 098 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 099 */ 100 public EntryQueryTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 101 102 /** 103 * Query を実行します。 104 * 105 * @og.rev 3.5.4.2 (2003/12/15) JDBCKeyEntryQuery クラス名変更(⇒ Query_JDBCKeyEntry) 106 * @og.rev 4.0.0.0 (2005/01/31) execute( String[] ,String[] )を標準メソッドに格上げします。 107 * @og.rev 6.3.6.1 (2015/08/28) close(),realClose() 廃止。Queryはキャッシュしません。 108 * 109 * @param query オブジェクト 110 */ 111 @Override 112 protected void execute( final Query query ) { 113 final String[] nameArray = getRequestKeys(); 114 final String[] values = getRequest( nameArray ); 115 // try { 116 query.execute( nameArray,values ); // 4.0.0 (2005/01/31) 117 errCode = query.getErrorCode(); 118 errMessage = query.getErrorMessage(); 119 // } 120 // catch( final HybsSystemException ex ) { 121 // throw ex; 122 // } 123 } 124 125 /** 126 * リクエスト情報のキー配列データを取得します。 127 * 128 * @og.rev 3.1.0.0 (2003/03/20) Vector を使用している箇所で、非同期でも構わない箇所を、ArrayList に置換え。 129 * 130 * @return そのリクエストのキー配列情報 131 */ 132 protected String[] getRequestKeys() { 133 final ArrayList<String> list = new ArrayList<>(); 134 135 final Enumeration<?> enume = getParameterNames(); // 4.3.3.6 (2008/11/15) Generics警告対応 136 137 while( enume.hasMoreElements() ) { 138 final String key = (String)(enume.nextElement()); 139 list.add( key ); 140 } 141 142 final String[] rtn = list.toArray( new String[list.size()] ); 143 144 return rtn; 145 } 146 147 /** 148 * 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCKeyEntry})。 149 * 150 * @og.tag 151 * 引数指定のINSERT/UPDATE文を実行する場合の、queryType 属性を使用します。 152 * このタグでは、execute( String[] , String[] )を実行します。 153 * 代表的なクラスとして、"JDBCKeyEntry" が標準で用意されています。 154 * 155 * タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 156 * 以下の Query_**** クラスの **** を与えます。 157 * これらは、Query インターフェースを継承したサブクラスです。 158 * {@og.doc03Link queryType Query_**** クラス} 159 * 160 * @og.rev 3.5.4.2 (2003/12/15) JavaDocコメント用にメソッド追加。 161 * 162 * @param id Queryを発行する為の実クラスID 163 * @see org.opengion.hayabusa.db.Query Queryのサブクラス 164 * @see org.opengion.hayabusa.db.Query#execute( String[] , String[] ) 165 */ 166 @Override 167 public void setQueryType( final String id ) { 168 super.setQueryType( nval( id,"JDBCKeyEntry" ) ); 169 } 170}