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.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.hayabusa.db.DBColumn; 021import org.opengion.hayabusa.db.DBColumnConfig; 022import org.opengion.hayabusa.resource.CodeData ; 023import org.opengion.hayabusa.resource.RoleMode ; 024import org.opengion.fukurou.util.Attributes; 025import org.opengion.fukurou.util.XHTMLTag; 026import org.opengion.fukurou.util.StringUtil; 027import static org.opengion.fukurou.util.StringUtil.nval ; 028 029/** 030 * カラムリソースに基づいた、入力フィールドなどを作成するHTML拡張タグです。 031 * 032 * name 属性に カラムリソースのキーを与えることにより、指定した表示形式にて画面に表示します。 033 * column タグは、リソースの設定が反映されるため、アプリケーションを修正せずに、 034 * 機能拡張することが可能です。たとえば、テキストフィールド入力に設定していたカラムを、 035 * プルダウンメニューに即座に変更可能です。 036 * カラム定義でロールが指定されている場合、ログインユーザーでアクセス許可がない場合は 037 * カラムは表示されません。 038 * カラムリソースに存在しない場合や特殊用途に使用する場合は、inputタグを使用してください。 039 * 040 * @og.formSample 041 * ●形式:<og:column name=… value=… /> 042 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 043 * 044 * ●Tag定義: 045 * <og:column 046 * name ○【TAG】カラムの名前を指定します(必須)。 047 * value 【TAG】設定値を指定します 048 * defaultVal 【TAG】value属性に値がセットされていないときに、初期値をセットします 049 * td 【TAG】テーブル形式の <td> タグを使用するかどうか[yes/no/false]を指定します(初期値:yes) 050 * addNoValue 【TAG】コンボボックスの場合、値なしのOptionを含めるかどうか[true/false]を指定します(初期値:true) 051 * lbl 【TAG】ラベルリソースのラベルIDを指定します 052 * must 【TAG】必須入力を表す色に変えるかどうか[true/false]を指定します(初期値:false) 053 * mustAny 【TAG】選択必須入力(どれかひとつ必須)を表す色[true/mustAny/その他]を指定します(初期値:無指定) 054 * aimai 【TAG】曖昧検索可能フィールドとして、曖昧検索方法を指定します(初期値:null) 055 * writable 【TAG】書き込みタイプかどうか[true/false]を指定します(初期値:true) 056 * colspan 【TAG】フィールド部分の colspan を指定します 057 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 058 * maxlength 【TAG】最大入力文字数を指定します(入力可能文字数で、バイト数ではありません) 059 * size 【TAG】カラムの表示サイズ(横幅)を文字数でセットします(入力文字制限ではありません) 060 * renderer 【TAG】カラムの表示用レンデラー({@og.doc03Link renderer Renderer_****})をセットします 061 * editor 【TAG】カラムの編集用エディター({@og.doc03Link editor Editor_****})をセットします 062 * dbType 【TAG】DBタイプ({@og.doc03Link dbType DBType_****})をセットします 063 * optionAttributes 【TAG】JavaScript などの HTML基本タグ以外の属性を、そのままタグとして使用します 064 * useDefaultPropertieVal 【TAG】リソースファイルの初期値を使うかどうか[true/false]を指定します(初期値:false) 065 * nextForm 【TAG】入力カーソルを、指定されたname属性のフィールドへ自動的に移動させます 066 * useRequestValue 【TAG】value が null の場合に、name 属性から Request情報 を適用するかどうかを指定します(初期値:true) 067 * codeName 【TAG】コードセレクトのユニークキー(コード名称)をセットします 068 * codeList 【TAG】コードセレクトのサブセットとなるコードをCSV形式で指定します 069 * codeGroup 【TAG】コードセレクトのサブセットとなるグループを指定します 070 * codeKeyVal 【TAG】新しいコードセレクトを作成する為の「キー:ラベル キー:ラベル」の文字列を指定します 071 * clazz 【HTML】要素に対して class 属性を設定します 072 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 073 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 074 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true) 075 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true) 076 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 077 * dir 【HTML】文字表記の方向(dir)を指定します 078 * title 【HTML】要素に対する補足的情報(title)を設定します 079 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 080 * readonly 【TAG】その部品に対して変更が出来ないように(readonly)指定します(サーバーに送信される) 081 * disabled 【TAG】その部品に対して、選択や変更が出来ないように(disabled)指定します(サーバーに送信されない) 082 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 〜 32767) 083 * accesskey 【HTML】アクセスキー(alt+キーで直接指定)を割り当てます 084 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 085 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 086 * onChange 【HTML】JavaScriptのイベント onChange を設定します(例:onChange="renew('query.jsp','QUERY');") 087 * onBlur 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();") 088 * onFocus 【HTML】JavaScriptのイベント onFocus を設定します 089 * ondblClick 【HTML】JavaScriptのイベント ondblClick を設定します 090 * onMouseDown 【HTML】JavaScriptのイベント onMouseDown を設定します 091 * onMouseUp 【HTML】JavaScriptのイベント onMouseUp を設定します 092 * onMouseMove 【HTML】JavaScriptのイベント onMouseMove を設定します 093 * onMouseOut 【HTML】JavaScriptのイベント onMouseOut を設定します 094 * onMouseOver 【HTML】JavaScriptのイベント onMouseOver を設定します 095 * onSelect 【HTML】JavaScriptのイベント onSelect を設定します 096 * onKeydown 【HTML】JavaScriptのイベント onKeydown を設定します 097 * onKeypress 【HTML】JavaScriptのイベント onKeypress を設定します 098 * onKeyup 【HTML】JavaScriptのイベント onKeyup を設定します 099 * autocomplete 【HTML5】入力候補を提示して入力内容を自動補完する[on/off](初期値はon)。 100 * autofocus 【HTML5】指定した入力欄にカーソルが当たって自動的にフォーカスされます。 101 * pattern 【HTML5】正規表現で入力値のパターンを指定します。 102 * placeholder 【HTML5】入力欄に初期表示する内容を指定します。 103 * required 【HTML5】入力必須を指定します 104 * list 【HTML5】ユーザーに入力候補として提案するデータリストの要素のid属性の値を指定します。 105 * min 【HTML5】入力欄で入力できる最小値を指定します。 106 * max 【HTML5】入力欄で入力できる最大値を指定します。 107 * step 【HTML5】入力欄で刻むステップ値を指定する。 108 * type 【HTML5】HTML5追加分[text/search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color] 109 * roles 【TAG】ロールをセットします 110 * eventColumn 【TAG】イベントカラム(親カラム)セット 111 * param 【TAG】パラメータをセットします 112 * dbid 【TAG】(通常使いません)データベースへ接続する場合のID 113 * eventURL 【TAG】イベントURLのセット 114 * xssCheck 【TAG】リクエスト情報の HTMLTag開始/終了文字(><) 存在チェックを実施するかどうか[true/false]を設定します (初期値:USE_XSS_CHECK[=true]) 115 * useSLabel 【TAG】MENU,DBMENUでSLABELを利用するかどうか[auto/true/false]を指定します(初期値:auto) 116 * eventCallback 【TAG】eventColumn実行後のcallbak関数指定 117 * useRealTimeCheck 【TAG】リアルタイムチェックを行うかどうか(初期値:行う) 118 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 119 * > ... Body ... 120 * </og:column> 121 * 122 * ●使用例 123 * <og:column name="PN" /> 編集種別がTextの場合は、テキストフィールドが表示されます。 124 * 通常はNAME属性を指定するだけです。 125 * <og:column name="CDC" /> 編集種別がMenuの場合は、メニューが表示されます。 126 * <og:column name="PN" value="syokichi" /> 初期値をセットするときはvalue属性を使います。 127 * <og:column name="PN" lbl="PNL" /> ラベルを変更するときはlbl属性を使います。 128 * <og:column name="CDC" /> リソースファイルからコンボボックスも自動作成されます。 129 * <og:column name="CDC" addNoValue="false" /> NULL値を消すときはaddNoValue属性を使います。 130 * <og:column name="CDC" addNoValue="false" must="true" /> 属性は、複数組み合わせて使えます。 131 * <og:column name="PN" must="true" /> 色を変更するときはmust属性を使います。 132 * <og:column name="PN" td="false" /> 自動作成されるtdタグやラベルを外すときはtd属性を使います。 133 * <og:column name="PN" td="no" /> 自動作成されるtdタグを外し、ラベルとフィールドは残します。 134 * <og:column name="PN" writable="false" /> 非入力にするときはwritable属性を使います。 135 * <og:column name="PN" size="20" /> 強制的にSIZEの変更をするときはsize属性を使います。 136 * <og:column name="A" nextForm="B" /> 最大桁数入力後、フォーム B にフォーカスが移動します。 137 * <og:column name="B" /> 138 * 139 * BODY 部分に記述した値は、カラムフィールドの直後にセットされます。 140 * <og:column name="PN" > 141 * <button type="button" onclick="popup(・・・);return false;"> 142 * <og:message lbl="POPUP" comment="▼" /> 143 * </button> 144 * </og:column> 145 * 146 * eventColumnを利用すると、親カラムの変更に従って子カラムの内容を変える事が可能です。 147 * ・親子関係のプルダウンを作成する場合 148 * <og:column name="OYA" /> 149 * <og:column name="KO" eventColumn="OYA" param="SELECT ... WHERE COL = '{@OYA}'" /> 150 * 151 * ・親子関係の入力欄(親のデータで子をDBから検索)を作成する場合 152 * <og:column name="OYA" /> 153 * <og:column name="KO" eventColumn="OYA" param="SELECT A AS VALUE WHERE COL = {@OYA}" /> 154 * 155 * ・親子関係の要素をカスタム化されたJSPを利用して作成する場合 156 * 変更するカラムはJSPで記述されており、指定する事が可能です。 157 * <og:column name="OYA" /> 158 * <og:column name="KO" eventColumn="OYA" param="{@OYA}" eventURL="custom_makeColumn.jsp" /> 159 * 160 * @og.group 画面部品 161 * 162 * @version 4.0 163 * @author Kazuhiko Hasegawa 164 * @since JDK5.0, 165 */ 166public class ColumnTag extends HTMLTagSupport { 167 //* このプログラムのVERSION文字列を設定します。 {@value} */ 168 private static final String VERSION = "5.9.18.1 (2017/03/07)" ; 169 170 private static final long serialVersionUID = 577120140613L ; 171 172 // 5.7.1.0 (2013/12/06) HTML5 で新たに追加された、type を追加。ただし、text だけは戻せるようにしておきます。 173 private static final String CHECK_TYPE = "|text|search|tel|url|email|datetime|date|month|week|time|datetime-local|number|range|color|" ; 174 175 // 4.0.0 (2005/01/31) HTML_LABEL_SEPARATOR を boolean 変数として取得します。 176 private final String CLM = HybsSystem.sysBool( "HTML_LABEL_SEPARATOR" ) ? ":" : "" ; 177 178 private String td_flag = "yes"; // yes:<td> タグを使用 / false:フィールドのみ / no:ラベルとフィールド 179 private boolean addNoValue = true; // 値なしのOptionをSelectに含めるかどうか 180 private String name = null; 181 private String value = null; 182 private boolean writable = true; // 書き込み/ラベルを指定する。(true で書き込み) 183 private String defaultVal = ""; // value がセットされていないときの初期値 184 // 2.1.0.0 (2002/10/11) useDefaultPropertieVal 属性を追加。 185 // 5.2.3.0 (2010/12/01) useDefaultPropertieVal 属性の初期値をシステムリソースで定義 186 // properties ファイルの初期値を 使う:true / 使わない:false 187 private boolean useDefVal = HybsSystem.sysBool( "USE_DEFAULT_PROPERTIE_VALUE" ); 188 189 // 3.0.0.0 (2002/12/25) colspan 属性を追加。 190 private String colspan = ""; 191 // 3.5.4.2 (2003/12/15) nextForm 属性を追加。 192 private String nextForm = null; 193 194 // 3.5.4.9 (2004/02/25) value が null の場合に、リクエスト情報を設定します。 195 private boolean useRequestValue = true; // 初期値:true 196 197 // 3.5.6.0 (2004/06/18) Attributes 経由でなく、直接 DBColumnConfig に設定します。 198 private String vewSize = null; 199 private String maxlength = null; 200 201 // 3.8.0.4 (2005/08/08) BODY 部分に記述した値は、カラムフィールドの直後にセットされます。 202 private String body = null; 203 private String codeName = null; // 3.8.0.6 (2005/09/12) 204 private String codeList = null; // 5.1.9.0 (2010/08/01) 新規追加(Codeリソースのサブセット) 205 private String codeGroup = null; // 5.1.9.0 (2010/08/01) 新規追加(Codeリソースのサブセットとなるグループ) 206 private String codeKeyVal = null; // 5.6.6.0 (2013/07/05) 新規追加(新しいコードセレクトを作成する為の KEY:VAL 文字列) 207 208 // 4.0.0 (2007/05/30) カラム状態を動的に変更します。 209 private String renderer = null; 210 private String editor = null; 211 private String dbType = null; 212 213 private String eventColumn = null; // 4.3.6.0 (2009/04/01) 親カラムの指定 214 private String eventURL = null; // 4.3.6.0 (2009/04/01) eventColumnで飛ばすURL 215 private String param = null; // 4.3.6.0 (2009/04/01) パラメータを変更可能にする 216 private String dbid = null; // 5.7.6.2 (2014/05/16) 217 218 private boolean xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.1.7.0 (2010/06/01) XSS対策 219 220 private String useSLabel = "auto"; // 5.5.1.0 (2012/04/03) 221 222 /** 223 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 224 * 225 * @og.rev 3.8.0.4 (2005/08/08) 新規追加(BODY部の評価) 226 * @og.rev 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 227 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 228 * 229 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 230 */ 231 @Override 232 public int doStartTag() { 233 // 5.9.10.0 (2016/07/01) doAfterBodyから移動 234 useXssCheck( xssCheck ); 235 236 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 237 if( useTag() ) { 238 // makeTag() より移動 239 if( value == null && useRequestValue ) { // 3.5.4.9 (2004/02/25) 240 // 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 241 String cmd = pageContext.getRequest().getParameter( "command" ); 242 if( "RENEW".equals( cmd ) ) { 243 value = getRequestValue( name ); 244 } 245 else { 246 value = nval( getRequestValue( name ),defaultVal ); 247 } 248 } 249 250 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 251 } 252 return SKIP_BODY ; // Body を評価しない 253 } 254 255 /** 256 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 257 * 258 * @og.rev 3.8.0.4 (2005/08/08) 新規追加(BODY部の評価) 259 * @og.rev 5.1.7.0 (2010/06/01) XSS解除対応 260 * 261 * @return 後続処理の指示(SKIP_BODY) 262 */ 263 @Override 264 public int doAfterBody() { 265 // 5.1.7.0 (2010/06/01) XSS対策 266 // 5.9.10.0 (2016/07/01) doStartTagに移動 267 // useXssCheck( xssCheck ); 268 269 body = getBodyString(); 270 return SKIP_BODY ; 271 } 272 273 /** 274 * タグリブオブジェクトをリリースします。 275 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 276 * 277 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 278 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 279 * @og.rev 3.0.0.0 (2002/12/25) colspan 属性を追加。 280 * @og.rev 3.0.1.4 (2003/03/17) colspan 属性の制御方法を変更 281 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 282 * @og.rev 3.5.4.2 (2003/12/15) nextForm 属性を追加。 283 * @og.rev 3.5.4.9 (2004/02/25) useRequestValue 属性を追加。 284 * @og.rev 3.5.6.0 (2004/06/18) Attributes 経由でなく、直接 DBColumnConfig に設定します。 285 * @og.rev 3.8.0.4 (2005/08/08) body , useBody 属性を追加。 286 * @og.rev 3.8.0.6 (2005/09/12) codeName 属性を追加。 287 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 288 * @og.rev 5.1.7.0 (2010/06/01) XSS解除対応 289 * @og.rev 5.1.9.0 (2010/08/01) codeList , codeGroup属性を追加。(Codeリソースのサブセットとなるグループ) 290 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 291 * @og.rev 5.2.3.0 (2010/12/01) useDefaultPropertieVal 属性の初期値をシステムリソースで定義 292 * @og.rev 5.6.6.0 (2013/07/05) codeKeyVal 属性を追加 293 * @og.rev 5.7.6.2 (2014/05/16) dbid 属性を追加 294 */ 295 @Override 296 protected void release2() { 297 super.release2(); 298 td_flag = "yes"; // table形式の <td> タグを使用するかどうか 299 addNoValue = true; // 値なしのOptionをSelectに含めるかどうか 300 name = null; 301 value = null; 302 writable = true; // 書き込み/ラベルを指定する。(true で書き込み) 303 defaultVal = ""; // value がセットされていないときの初期値 304 useDefVal = HybsSystem.sysBool( "USE_DEFAULT_PROPERTIE_VALUE" ); // 5.2.3.0 (2010/12/01) 305 colspan = ""; 306 nextForm = null; // 3.5.4.2 (2003/12/15) 307 useRequestValue = true; // 3.5.4.9 (2004/02/25) 308 vewSize = null; // 3.5.6.0 (2004/06/18) 309 maxlength = null; // 3.5.6.0 (2004/06/18) 310 body = null; // 3.8.0.4 (2005/08/08) 311 codeName = null; // 3.8.0.6 (2005/09/12) 312 codeList = null; // 5.1.9.0 (2010/08/01) 新規追加(Codeリソースのサブセット) 313 codeGroup = null; // 5.1.9.0 (2010/08/01) 新規追加(Codeリソースのサブセットとなるグループ) 314 codeKeyVal = null; // 5.6.6.0 (2013/07/05) 新規追加(新しいコードセレクトを作成する為の KEY:VAL 文字列) 315 renderer = null; 316 editor = null; 317 dbType = null; 318 eventColumn = null; // 4.3.6.0 (2009/04/01) 319 eventURL = null; // 4.3.6.0 (2009/04/01) 320 param = null; // 4.3.6.0 (2009/04/01) 321 dbid = null; // 5.7.6.2 (2014/05/16) 322 xssCheck = HybsSystem.sysBool( "USE_XSS_CHECK" ); // 5.1.7.0 (2010/06/01) XSS解除対応 323 324 } 325 326 /** 327 * 検索条件の入力用のテキストフィールドを作成します。 328 * 329 * テーブルタグによりフィールドは分割されます。 330 * 使用時は、テーブルタグを前後に使用して下さい。 331 * 332 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 333 * @og.rev 2.0.1.0 (2002/10/10) ラベルとフィールドのセパレーターとして、コロン(:)を使用するかどうかを指定できる 334 * @og.rev 3.0.0.0 (2002/12/25) colspan 属性を追加。 335 * @og.rev 3.0.1.4 (2003/03/17) colspan 属性の制御方法を変更 336 * @og.rev 3.5.4.9 (2004/02/25) value が null の時の 値の設定方法 337 * @og.rev 3.5.4.9 (2004/02/25) value が null の時の 値の設定方法 338 * @og.rev 3.8.0.4 (2005/08/08) body 属性を追加。 339 * @og.rev 3.8.7.0 (2006/12/15) カラムリソースで指定したカラムラベルを反映させる。 340 * @og.rev 4.0.0.0 (2005/11/30) カラムロールを考慮 341 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 342 * @og.rev 4.3.7.1 (2009/06/08) id=labelのclass化 343 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 344 * @og.rev 5.6.2.2 (2013/03/15) 自動must処理の出力位置を変更 345 * @og.rev 5.8.4.1 (2015/02/15) aimai追加 6.2.0.0逆移植 346 * 347 * @return 入力用のテキストフィールドタグ 348 */ 349 @Override 350 protected String makeTag() { 351 // 3.8.7.0 (2006/12/15) カラムリソースで指定したカラムラベルを反映させる。 352 DBColumn dbColumn = getDBColumn( name ); 353 String label = getLongLabel() ; 354 if( label == null ) { label = dbColumn.getLongLabel() ; } 355 356 String tag = getInsertTag( dbColumn,value ); 357 358 // 4.0.0 (2005/11/30) カラムロールを考慮 359 if( tag == null ) { return ""; } // アクセス不可の場合は、ゼロ文字列を返す。 360 361 // 3.8.0.4 (2005/08/08) BODY を使用する場合は、カラムフィールドの直後に挿入する。 362 if( body != null ) { tag = tag + body; } 363 364 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 365 if( "yes".equals( td_flag ) ) { 366 // 4.3.7.1 (2009/06/08) id=labelのclass化 367 // rtn.append( "<td id=\"label\">" ); 368 rtn.append( "<td class=\"label\">" ); 369 rtn.append( label ); 370 rtn.append( CLM ); 371 rtn.append( "</td>" ); 372 rtn.append( "<td" ); 373 rtn.append( colspan ); 374 rtn.append( ">" ); 375 rtn.append( tag ); 376 rtn.append( makeAimaiPicker( name ) ); // 5.8.4.2(2015/02/20) 377 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.1 (2013/03/15) 378 rtn.append( "</td>" ); 379 } 380 else if( "no".equals( td_flag ) ) { 381 // 4.3.7.1 (2009/06/08) id=labelのclass化 382 //rtn.append( "<span id=\"label\">" ); 383 rtn.append( "<span class=\"label\">" ); 384 rtn.append( label ); 385 rtn.append( CLM ); 386 rtn.append( "</span>" ); 387 rtn.append( tag ); 388 rtn.append( makeAimaiPicker( name ) ); // 5.8.4.2(2015/02/20) 389 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.1 (2013/03/15) 390 } 391 else { 392 rtn.append( tag ); 393 rtn.append( makeAimaiPicker( name ) ); // 5.8.4.2(2015/02/20) 394 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.1 (2013/03/15) 395 } 396 397 return rtn.toString() ; 398 } 399 400 /** 401 * カラムがselectタグの場合に、値なしのオプション文字列を挿入します。 402 * 403 * addNoValue 値が True の場合のみ、挿入します。 404 * 405 * @og.rev 2.1.0.0 (2002/10/11) useDefaultPropertieVal 属性を追加。 406 * @og.rev 3.5.4.2 (2003/12/15) 入力カーソルを自動的に次のフィールドへ移動する機能を追加する。 407 * @og.rev 3.5.5.5 (2004/04/23) DBColumn の size と maxlength の 意味を変更 408 * @og.rev 3.5.5.7 (2004/05/10) DBColumn.getOption( String ) 廃止 409 * @og.rev 3.5.6.0 (2004/06/18) Attributes 経由でなく、直接 DBColumnConfig に設定します。 410 * @og.rev 3.8.0.6 (2005/09/12) codeName 属性を追加。 411 * @og.rev 3.8.7.0 (2006/12/15) カラムリソースで指定したカラムラベルを反映させる。 412 * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソッドを XHTMLTag から DBColumn へ移動 413 * @og.rev 4.0.0.0 (2005/11/30) カラムロールを考慮。アクセス不可の場合は、null を返す。 414 * @og.rev 4.3.0.0 (2008/07/04) ロールモードマルチ対応 415 * @og.rev 4.3.7.2 (2009/06/15) 不要なIDが出力されるバグを修正 416 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 417 * @og.rev 5.1.7.0 (2010/06/01) DBColumnの{@XXXX}変数対応 418 * @og.rev 5.1.9.0 (2010/08/01) codeList ,codeGroup 属性を追加(Codeリソースのサブセットとなるグループ) 419 * @og.rev 5.5.4.0 (2012/07/02) eventColumnの{@USER.XXXX}対応 420 * @og.rev 5.6.6.0 (2013/07/05) codeKeyVal 属性を追加 421 * @og.rev 5.7.6.2 (2014/05/16) dbid 属性を追加、IEのHTML5機能が無効の場合の処理 422 * @og.rev 5.7.6.2 (2014/05/16) IEのHTML5機能が無効の場合、list 属性は削除します。 423 * @og.rev 5.7.7.1 (2014/06/13) codeName 設定時に、renderer,editor が null の場合のみ、MENUに設定 424 * @og.rev 5.9.18.1 (2017/03/24) editorにDATALIST_Rの追加対応 425 * 426 * @param clm DBColumnカラムオブジェクト 427 * @param value 設定値 428 * 429 * @return 入力用のカラムタグ 430 */ 431 private String getInsertTag( final DBColumn clm, final String value ) { 432 String val = value; 433 434 // 4.3.0.0 (2008/07/04) ロールモードマルチ対応 435 RoleMode roleMode = null; 436 String roles = get( "roles" ); 437 if( roles != null ) { 438 roleMode = RoleMode.newInstance( roles ); 439 } 440 else { 441 roleMode = clm.getRoleMode(); 442 } 443 444 byte byteMode = getUser().getAccessBitMode( roleMode ) ; 445 446 if( !RoleMode.isAccess( byteMode ) ) { return null; } // アクセス不可(rw不可) 447 448 // 書き込み権限のチェック 449 // writable = writable && RoleMode.isWrite( byteMode ); 450 451 // 3.5.4.2 (2003/12/15) 入力カーソルを自動的に次のフィールドへ移動する機能 452 if( nextForm != null ) { 453 if( maxlength == null ) { maxlength = String.valueOf( clm.getTotalSize() ); } // 4.0.0 (2005/01/31) メソッド名変更 454 455 String onKeyup = "nextForm(this,'" + nextForm + "'," + maxlength + ");" ; 456 set( "onKeyup",onKeyup ); 457 } 458 459 // 3.5.6.0 (2004/06/18) 直接 DBColumnConfig に設定します。 460 if( vewSize == null && maxlength != null ) { 461 // 4.0.0 (2005/01/31) getFieldSize メソッドを XHTMLTag から DBColumn へ移動 462 int fsize = clm.getFieldSize( Integer.parseInt( maxlength ) ); 463 vewSize = String.valueOf( fsize ); 464 } 465 466 DBColumnConfig config = clm.getConfig(); 467 468 // 5.7.6.2 (2014/05/16) IEのHTML5機能が無効の場合の処理 469 String ieHTML5 = (String)getSessionAttribute( HybsSystem.IE_HTML5_KEY ); 470 if( "FALSE".equalsIgnoreCase( ieHTML5 ) ) { 471 if( "DATALIST".equalsIgnoreCase( editor ) || 472 "DATALIST".equalsIgnoreCase( config.getEditor() ) ) { 473 editor = "INDBMENU"; 474 set( "list",null ); // 5.7.6.2 (2014/05/16) list 属性は削除します。 475 } 476 477 // 5.9.18.1 (2017/03/24) IEのHTML5機能が無効の場合の処理(DATALIST_R用) 478 if( "DATALIST_R".equalsIgnoreCase( editor ) || 479 "DATALIST_R".equalsIgnoreCase( config.getEditor() )){ 480 editor = "INMENU"; 481 set( "list",null ); 482 } 483 } 484 485 if( maxlength != null ) { config.setMaxlength( maxlength ); } 486 if( vewSize != null ) { config.setViewLength( vewSize ); } // 4.0.0 (2005/01/31) 487 if( renderer != null ) { config.setRenderer( renderer ); } 488 if( editor != null ) { config.setEditor( editor ); } 489 if( dbType != null ) { config.setDbType( dbType ); } 490 if( eventColumn != null ) { config.setEventColumn( eventColumn ); } // 4.3.6.0 (2009/04/01) 491 if( param != null ) { // 4.3.6.0 (2009/04/01) 492 config.setParameter( getRequestParameter( param ) ); // ここで{@XXXX}変換 493 config.setRawParameter( getReservedParameter(param) ); // 5.5.4.0 (2012/07/02) 予約語対応 494 } 495 // 5.1.7.0 (2010/06/01) DBColumnの{@XXXX}変数対応 496 else if ( clm.isNeedsParamParse() ){ 497 config.setRendererParam( getRequestParameter( config.getRendererParam() ) ); 498 config.setEditorParam( getRequestParameter( config.getEditorParam() ) ); 499 } 500 if( dbid != null ) { config.setDbid( dbid ); } // 5.7.6.2 (2014/05/16) 501 if( eventURL != null ) { config.setEventURL( eventURL ); } // 4.3.6.0 (2009/04/01) 502 if( useSLabel != null ) { config.setUseSLabel( useSLabel ); } // 5.5.1.0 (2012/04/03) 503 504 // 4.0.0 (2005/01/31) 505 if( codeName != null ) { 506 CodeData codeData = getResource().getCodeData( codeName ) ; 507 config.setCodeData( codeData ); 508 // 5.7.7.1 (2014/06/13) codeName 設定時に、renderer,editor が null の場合のみ、MENUに設定。 509// config.setRenderer( "MENU" ); 510// config.setEditor( "MENU" ); 511 if( renderer == null ) { config.setRenderer( "MENU" ); } 512 if( editor == null ) { config.setEditor( "MENU" ); } 513 } 514 515 // 5.6.6.0 (2013/07/05) CodeData オブジェクトの取得を表に移動 516 // codeName で指定のリソースでも、サブセットが作成できます。 517 CodeData codeData = config.getCodeData() ; 518 if( codeData != null ) { 519 // 5.1.9.0 (2010/08/01) codeList 属性を追加(Codeリソースのサブセット) 520 if( codeList != null ) { 521 config.setCodeData( codeData.subsetList( codeList ) ); 522 } 523 524 // 5.1.9.0 (2010/08/01) codeGroup 属性を追加(Codeリソースのサブセットとなるグループ) 525 if( codeGroup != null ) { 526 config.setCodeData( codeData.subsetGroup( codeGroup ) ); 527 } 528 529 // 5.1.9.0 (2010/08/01) RoleMode 制御を追加(Codeリソースのサブセット) 530 if( codeData.useRoleMode() ) { 531 config.setCodeData( codeData.subsetRole( getUser().getRoleMode() ) ); 532 } 533 } 534 535 // 5.6.6.0 (2013/07/05) codeKeyVal 新しいコードセレクトを作成する。 536 if( codeKeyVal != null ) { 537 config.setCodeKeyVal( codeKeyVal ); 538 config.setRenderer( "MENU" ); 539 config.setEditor( "MENU" ); 540 } 541 542 Attributes attri = getAttributes(); 543 config.setEditorAttributes( attri ); 544 DBColumn column = new DBColumn( config ); 545 546 if( useDefVal && ( val == null || val.length() == 0 ) ) { 547 val = column.getDefault(); 548 } 549 550 String rtn = null; 551 if( writable ) { 552 String editTag = column.getEditorValue( val ); 553 StringBuilder tag = new StringBuilder( editTag ); 554 if( addNoValue && editTag.startsWith( "<select" ) ) { 555 int offset = editTag.indexOf( '>' ); 556 tag.insert( offset+1,"<option value=\"\" ></option>" ); 557 } 558 rtn = tag.toString(); 559 } 560 else { 561 if( attri == null || attri.size() == 0 ) { 562 rtn = column.getRendererValue( val ); 563 } 564 else { 565 attri.set( "body" , column.getRendererValue( val ) ); 566 rtn = XHTMLTag.span( attri ); 567 } 568 } 569 570 // 4.3.6.0 (2009/04/01) eventColumn対応 生SQL文のセッション保存 571 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 572 String evCol = column.getEventColumn(); 573 if( evCol != null && evCol.length() > 0 ){ 574 addEventColumn( column ); 575 rtn = column.getEventColumnTag( rtn, val, writable ); 576 } 577 578 return rtn; 579 } 580 581 /** 582 * 【TAG】カラムの名前を返します。 583 * 584 * @og.tag 585 * <og:column name="PN" /> 586 * 587 * @og.rev 4.2.4.0 (2008/07/01) 588 * 589 * @return カラムの名前 590 */ 591 protected String getName() { 592 return name; 593 } 594 595 /** 596 * 【TAG】カラムの名前を指定します。 597 * 598 * @og.tag 599 * <og:column name="PN" /> 600 * 601 * @og.rev 3.8.0.9 (2005/10/17) RequestParameter変数({@XXXX})が使用できるように修正 602 * 603 * @param name 名前 604 */ 605 public void setName( final String name ) { 606 this.name = nval( getRequestParameter( name ),this.name ); 607 } 608 609 /** 610 * 【TAG】設定値を指定します。 611 * 612 * @og.tag 613 * <og:column name="PN" value="syokichi" /> 614 * 615 * @param val 設定値 616 */ 617 public void setValue( final String val ) { 618 value = nval( getRequestParameter( val ),value ); 619 } 620 621 /** 622 * 【TAG】value属性に値がセットされていないときに、初期値をセットします。 623 * 624 * @og.tag 625 * value属性に値がセットされていないときに、初期値をセットします。 626 * 627 * なお、commandがRENEWの場合は、このdefaultValは適用されません。 628 * これは、defaultValの値が埋め込まれた項目が存在する画面に戻った際に、 629 * defaultValの項目の値がnullとなっていた場合に、defaultValの値が復元されると、 630 * 検索結果との不一致が発生するためです。 631 * 632 * @param dv 初期値 633 */ 634 public void setDefaultVal( final String dv ) { 635 defaultVal = nval( getRequestParameter( dv ),defaultVal ); 636 } 637 638 /** 639 * 【TAG】リソースファイルの初期値を使うかどうか[true/false]を指定します(初期値:false)。 640 * 641 * @og.tag 642 * 初期値がセットされていないときに指定します。 643 * 使う場合はtrue、 使わない場合は falseをセットします。 644 * この初期値を、システムリソースの USE_DEFAULT_PROPERTIE_VALUE で設定可能とします。 645 * 646 * @og.rev 2.1.0.0 (2002/10/11) useDefaultPropertieVal 属性を追加。 647 * @og.rev 5.2.3.0 (2010/12/01) 初期値をシステムリソースで定義(USE_DEFAULT_PROPERTIE_VALUE) 648 * 649 * @param dv ファイルの初期値を指定 [true:使う/false:使わない] 650 */ 651 public void setUseDefaultPropertieVal( final String dv ) { 652 useDefVal = nval( getRequestParameter( dv ),useDefVal ); 653 } 654 655 /** 656 * 【TAG】テーブル形式の <td> タグを使用するかどうか[yes/no/false]を指定します(初期値:yes)。 657 * 658 * @og.tag 659 * yes(初期値) とすると、ラベルとフィールドをテーブルのtdタグでそれぞれ記述します。 660 * no とすると、tdタグを使用せず、ラベルとフィールドを表示します。 661 * false は、ラベルを出さずに、フィールドのみを表示します。 662 * 663 * <td><og:column name="PN" td="no" /> </td> 664 * 665 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 666 * @og.rev 2.1.2.3 (2002/12/02) errMsg の文字列の修正漏れを訂正 667 * 668 * @param flag [yes:タグを使用/no:ラベルとフィールド/false:フィールドのみ] 669 */ 670 public void setTd( final String flag ) { 671 String td = nval( getRequestParameter( flag ),td_flag ); 672 673 if( check( "|" + td + "|" , "|yes|no|false|" ) ) { 674 td_flag = td; 675 } 676 else { 677 String errMsg = "td 属性は、下記の範囲より選定してください。 td=[" 678 + td + " in [|yes|no|false|]"; 679 throw new HybsSystemException( errMsg ); 680 } 681 } 682 683 /** 684 * 【TAG】コンボボックスの場合、値なしのOptionを含めるかどうか[true/false]を指定します(初期値:true)。 685 * 686 * @og.tag 687 * カラムがプルダウンメニュー形式の場合、選択肢には通常データベース登録できる候補が 688 * 並びます。しかし、検索時には、候補を絞りたくない(指定しない)場合があり、 689 * その様な場合には、値なしのOptionを含める(true)ことで、対応可能です。 690 * 初期値:true(値なしのOptionを含める)なので、検索画面に利用する場合は、そのまま使用できます。 691 * 692 * <og:column name="CDC" addNoValue="false" /> 693 * 694 * @param flag [true:含める/それ以外:含めない] 695 */ 696 public void setAddNoValue( final String flag ) { 697 addNoValue = nval( getRequestParameter( flag ),addNoValue ); 698 } 699 700 /** 701 * 【TAG】書き込みタイプかどうか[true/false]を指定します(初期値:true)。 702 * 703 * @og.tag 704 * 初期値は、書き込みタイプ("true") です。 705 * <og:column name="PN" writable="false" /> 706 * 707 * @param flag [true:書き込みタイプ/それ以外:ラベルタイプ] 708 */ 709 public void setWritable( final String flag ) { 710 writable = nval( getRequestParameter( flag ),writable ); 711 } 712 713 /** 714 * 【TAG】最大入力文字数を指定します(入力可能文字数で、バイト数ではありません)。 715 * 716 * @og.tag 717 * <og:column name="PN" maxlength="20" /> 718 * 719 * @og.rev 3.5.4.2 (2003/12/15) 最大入力制限数に応じたサイズ自動生成を入れます。 720 * @og.rev 3.5.4.5 (2004/01/23) CSSで処理する場合のクラス属性は、maxlength が 5 以下の場合とする。 721 * @og.rev 3.5.6.0 (2004/06/18) Attributes 経由でなく、直接 DBColumnConfig に設定します。 722 * 723 * @param maxlen 最大入力文字数 724 */ 725 public void setMaxlength( final String maxlen ) { 726 maxlength = nval( getRequestParameter( maxlen ),null ); 727 728 // 3.5.4.5 (2004/01/23) 追加 729 if( maxlength != null && maxlength.length() == 1 ) { 730 char ch = maxlength.charAt(0); 731 if( ch >= '1' && ch <= '5' ) { 732 add( "class", "S0" + ch ); // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソッドに変更 733 } 734 } 735 } 736 737 /** 738 * 【TAG】カラムの表示サイズ(横幅)を文字数でセットします(入力文字制限ではありません)。 739 * 740 * @og.tag 741 * <og:column name="PN" size="20" /> 742 * 743 * @og.rev 3.5.6.0 (2004/06/18) Attributes 経由でなく、直接 DBColumnConfig に設定します。 744 * 745 * @param size 表示サイズ(横幅) 746 */ 747 public void setSize( final String size ) { 748 vewSize = nval( getRequestParameter( size ),null ); 749 } 750 751 /** 752 * 【TAG】フィールド部分の colspan を指定します。 753 * 754 * @og.tag 755 * 通常の出力では、ラベルとフィールドのtdが2つ使用されます。この colspan は、 756 * フィールドに追加されます。 757 * たとえば、3 を指定した場合、フィールドが、次のテーブルの、ラベル、フィールド部分まで 758 * 伸びるため、レイアウト的にすっきりと、長いフィールドを適用する事が可能です。 759 * 760 * <og:column name="PN" colspan="3" /> 761 * 762 * @og.rev 3.0.0.0 (2002/12/25) colspan 属性を追加。 763 * @og.rev 3.0.1.4 (2003/03/17) colspan 属性の制御方法を変更 764 * 765 * @param sp フィールド部分のcolspan 766 */ 767 public void setColspan( final String sp ) { 768 colspan = nval( getRequestParameter( sp ),colspan ); 769 if( colspan.length() > 0 ) { 770 colspan = " colspan=\"" + colspan + "\" "; 771 } 772 } 773 774 /** 775 * 【TAG】入力カーソルを、指定されたname属性のフィールドへ自動的に移動させます。 776 * 777 * @og.tag 778 * JavaScript の onKeyup イベントを利用して、最大桁数まで入力すると、 779 * 次のフィールドに、自動的にカーソルが飛ぶように設定します。 780 * 引数は、次に飛ばすフィールドの name 属性です。 781 * 実行するには、JavaScript の nextForm 関数が必要です。(default.js で指定) 782 * 783 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 784 * 785 * @param name 次にフォーカスを移すタグのname属性 786 */ 787 public void setNextForm( final String name ) { 788 nextForm = nval( getRequestParameter( name ),nextForm ); 789 } 790 791 /** 792 * 【TAG】value が null の場合に、name 属性から Request情報 を適用するかどうかを指定します(初期値:true)。 793 * 794 * @og.tag 795 * name 属性に一致するリクエスト情報がある場合、value が null の場合や、 796 * 引数を設定していない場合は、この設定値に応じて、リクエスト情報の値を 797 * 設定します(初期値:true なので、通常はこの動きです) 798 * ごくまれに、ENTRY 系の削除を行う場合、リクエスト情報が残り、削除されずに 799 * 再表示(DB的には削除済み)されるケースでは、使用しない(false)設定が可能です。 800 * 801 * useRequestValue | true(初期値) | false 802 * ------------------+------------------------+------------ 803 * value |A A A A _ _ _ _ |_ _ _ _ 804 * name(Request情報)|B B _ _ B B _ _ |B B _ _ 805 * defaultVal |C _ C _ C _ C _ |C _ C _ 806 * ==================+========================+============ 807 * 設定値 |A A A A B B C _ |C _ C _ 808 * 809 * @og.rev 3.5.4.9 (2004/02/25) 新規追加 810 * 811 * @param flag value が null の時の 値の設定方法 812 */ 813 public void setUseRequestValue( final String flag ) { 814 useRequestValue = nval( getRequestParameter( flag ),useRequestValue ); 815 } 816 817 /** 818 * 【TAG】コードセレクトのユニークキー(コード名称)をセットします。 819 * 820 * @og.tag 821 * このキーを元に、CodeData オブジェクトを構築します。 822 * 823 * @og.rev 3.8.0.6 (2005/09/12) 新規作成 824 * 825 * @param name メニューのユニークキー 826 */ 827 public void setCodeName( final String name ) { 828 codeName = nval( getRequestParameter( name ),codeName ); 829 } 830 831 /** 832 * 【TAG】コードセレクトのサブセットとなるコード(キー)をCSV形式で指定します。 833 * 834 * @og.tag 835 * この値に限定された、コードリソースを、既存の、CodeData の 836 * サブセットとして作成します。 837 * codeName で指定されたリソースでも、サブセットを作成する事ができます。 838 * ここで指定するのは、コード(キー)だけです。 839 * 840 * @og.rev 5.1.9.0 (2010/08/01) 新規作成 841 * 842 * @param list コードセレクトのサブセットとなるコード(キー) 843 */ 844 public void setCodeList( final String list ) { 845 codeList = nval( getRequestParameter( list ),codeList ); 846 } 847 848 /** 849 * 【TAG】コードセレクトのサブセットとなるグループを指定します。 850 * 851 * @og.tag 852 * この値に限定された、コードリソースを、既存の、CodeData の 853 * サブセットとして作成します。 854 * codeName で指定されたリソースでも、サブセットを作成する事ができます。 855 * グループとは、optiongroup の事ではなく、コードリソースに関連付けられた 856 * グループを指定する事で、簡易的にサブセットを作成します。 857 * 858 * @og.rev 5.1.9.0 (2010/08/01) 新規作成 859 * 860 * @param group コードセレクトのサブセットとなるグループ 861 */ 862 public void setCodeGroup( final String group ) { 863 codeGroup = nval( getRequestParameter( group ),codeGroup ); 864 } 865 866 /** 867 * 【TAG】新しいコードセレクトを作成する為の「キー:ラベル キー:ラベル」の文字列を指定します。 868 * 869 * @og.tag 870 * 既存の、CodeData には存在しない、新しいコードリソースを作成する為の、文字列を指定します。 871 * 文字列は、「キー:ラベル キー:ラベル」形式で、スペースで分解後、":" でキーとラベルに分離します。 872 * スペース分解後の文字列に、":" が含まれていない場合は、無視されます。 873 * 内部的には、CodeData を作成しません。DBColumnオブジェクト内で、直接、Selection_KEYVAL を生成します。 874 * codeName 、codeList、codeGroup などが指定された場合は、そちらが優先されます。 875 * 「キー:ラベル キー:ラベル」で、ラベル にスペースを含ませる場合は、ダブルクォーテーションで囲ってください。 876 * 877 * @og.rev 5.6.6.0 (2013/07/05) 新規作成 878 * 879 * @param keyval 新しいコードセレクトを作成する為の KEY:VAL 文字列 880 */ 881 public void setCodeKeyVal( final String keyval ) { 882 codeKeyVal = nval( getRequestParameter( keyval ),codeKeyVal ); 883 } 884 885 /** 886 * 【TAG】カラムの表示用レンデラー({@og.doc03Link renderer Renderer_****})をセットします。 887 * 888 * @og.tag 889 * これは、plugin.column 以下の Renderer_**** クラスの **** を 890 * 与えます。これらは、CellRenderer インターフェースを継承したサブクラスです。 891 * 属性クラス定義の {@link org.opengion.hayabusa.db.CellRenderer Renderer} を参照願います。 892 * {@og.doc03Link renderer Renderer_**** クラス} 893 * 894 * @param rdr カラムの表示用レンデラー(Renderer_**** の ****) 895 * @see org.opengion.hayabusa.db.CellRenderer 896 */ 897 public void setRenderer ( final String rdr ) { 898 renderer = nval( getRequestParameter( rdr ),renderer ); 899 } 900 901 /** 902 * 【TAG】カラムの編集用エディター({@og.doc03Link editor Editor_****})をセットします。 903 * 904 * @og.tag 905 * これは、plugin.column 以下の Editor_**** クラスの **** を 906 * 与えます。これらは、CellEditor インターフェースを継承したサブクラスです。 907 * 属性クラス定義の {@link org.opengion.hayabusa.db.CellEditor Editor} を参照願います。 908 * {@og.doc03Link editor Editor_**** クラス} 909 * 910 * @param ed カラムの編集用エディター(Editor_**** の ****) 911 * @see org.opengion.hayabusa.db.CellEditor 912 */ 913 public void setEditor ( final String ed ) { 914 editor = nval( getRequestParameter( ed ),editor ); 915 } 916 917 /** 918 * 【TAG】DBタイプ({@og.doc03Link dbType DBType_****})をセットします。 919 * 920 * @og.tag 921 * これは、org.opengion.hayabusa.db.column 以下の DBType_**** クラスの **** を 922 * 与えます。これらは、DBType インターフェースを継承したサブクラスです。 923 * 属性クラス定義の {@link org.opengion.hayabusa.db.DBType DBType} を参照願います。 924 * {@og.doc03Link dbType DBType_**** クラス} 925 * 926 * @param dt パラメータ 927 * @see org.opengion.hayabusa.db.DBType DBType_**** の **** 928 */ 929 public void setDbType( final String dt ) { 930 dbType = nval( getRequestParameter( dt ),dbType ); 931 } 932 933 /** 934 * 【TAG】イベントカラム(親カラム)セット。 935 * 936 * @og.tag 937 * 親子関係を持った項目の動的な入れ替えを行う場合に利用します。 938 * このカラムを変化させるトリガとなるカラムの名前をセットします。 939 * 940 * この属性がセットされた場合、親カラムが変更都度子カラム(自身のカラム)が 941 * 再表示されます。 942 * 標準で再表示時に受け継がれる属性は以下の通りです。 943 * (1)editor・renderer 944 * (2)writable 945 * (3)addNoValue 946 * (4)class(must・mustAnyや、DBTypeを含みます) 947 * (5)style(optionAttributes等でセットしたもの) 948 * (6)size 949 * (7)maxlength 950 * これら以外に特殊な設定を行ったカラムに関しては、eventURL属性でカスタムの 951 * 置き換え用JSPを作成し、個別に対応して下さい。 952 * 953 * また、置き換えの定義は、param属性で定義します。 954 * param属性に定義されたSQL文の結果により、各種エディター、レンデラーによって、以下の 955 * ように置き換えが行われます。 956 * 957 * (1)DBMENUの場合 958 * paramに指定されたSQL文により動的にプルダウンを置き変えます。 959 * SQL文の{@XXXX}の記述により、その時点での親カラムの値を参照することができます。 960 * 961 * 例) SELECT A.CODE,B.LNAME FROM GEA04 A,GEA08 B 962 * WHERE A.CLM||'.'||A.CODE = B.CLM 963 * AND A.SYSTEM_ID = B.SYSTEM_ID 964 * AND A.CLM like 'KBSAKU%' 965 * AND B.LANG like '{@LANG}' ← name=LANGを持つ項目のその時点での値に変換される 966 * AND B.SYSTEM_ID = '**' 967 * 968 * (2)DBMENU以外の場合 969 * paramに指定されたSQL文により値(value値)を置き換えたカラムを作成し、置き換えます。 970 * DBMENUの場合と同様、SQL文の{@XXXX}の記述により、その時点での親カラムの値を参照することができます。 971 * 972 * 例) SELECT LABEL_NAME FROM GF41 973 * WHERE SYSTEM_ID='{@SYS.SYSTEM_ID}' AND CLM='{@CLM}' AND LANG='{@LANG}' 974 * 975 * なお、いずれの場合も、{@XXXX}の部分については、$1,$2...の形式でも記述することができます。 976 * この場合、$1は1番目のeventColumnのカラム、$2は2番目のeventColumnのカラムと指します。 977 * 978 * (注意点1)イベントカラムによるイベントは、画面表示時に1度実行されます。 979 * 但し、eventColumn属性で、カラム名の先頭に'_'をつけた場合、 980 * または親カラムの値がNULLの場合は実行されません。 981 * 982 * (注意点2)SQL文などのパラメーター中に記述された{@XXXX}の値の変換はJavaScriptにより行われるため、 983 * 値が取得できる項目は、"画面に書き込み可能状態で表示されているカラム"に限ります。 984 * テーブルモデル内の変数や表示のみの値については、ここでは利用することはできません。 985 * {@USER.XXXX}等の予約語に関しては、5.5.4.0以降では処理されます。 986 * 987 * (注意点3)現時点では、INMENU,INDBMENUについては、入れ替え後のJavaScriptが正常に動作しないため、 988 * イベントカラムが正常に動作しません。 989 * 990 * @og.rev 4.3.6.0 (2009/04/01) 991 * @og.rev 5.1.7.0 (2010/06/01) コメント大幅修正 992 * @param col 親カラム 993 */ 994 public void setEventColumn( final String col ) { 995 eventColumn = nval( getRequestParameter( col ), eventColumn ); 996 } 997 998 /** 999 * 【TAG】イベントURLのセット。 1000 * 1001 * @og.tag 1002 * 初期値はシステムリソースのEVENT_COLUMN_URLです。 1003 * イベントカラム指定時に部品を作成するJSPを指定します。 1004 * (設定例:eventURL="makeColumn_custom.jsp") 1005 * 1006 * 置き換え対象のカラムに特殊な設定がされており、標準のカラム置き換えでは対応できない場合に、 1007 * このURLを指定することで、個別に置き換え方法を定義する必要があります。 1008 * 1009 * なお、個別に置き換え方法を定義したJSPを作成する場合は、標準(jsp/common/eventColumnMaker.jsp)を 1010 * 参考にして作成して下さい。 1011 * 1012 * eventColumnから利用するJSPで利用可能なリクエスト変数 1013 * {@EC_CNAME} 子カラム名(一覧表示の場合でも行番号__nは付加されません) 1014 * {@EC_RENDERER} 子カラムのレンデラー 1015 * {@EC_EDITOR} 子カラムのエディター 1016 * {@EC_SQL} 子カラムのプルダウン、または値を出力するためのSQL文({@XXXX}をカラムのvalue値で置き換えたもの) 1017 * {@EC_WRITABLE} 子カラムが編集可能などうか 1018 * {@EC_CVALUE} 子カラムの現在の値 1019 * {@EC_NOVALUE} 子カラムの最上部Option値が空ならtrue。その他false(addNoValue属性値と同じです) 1020 * {@EC_CLASS} 子カラムのCLASS属性 1021 * {@EC_SIZE} 子カラムのSIZE属性 1022 * {@EC_MAXLENGTH} 子カラムのMAXLENGTH属性 1023 * {@EC_OPTATTRS} 子カラムのその他OPTION属性 1024 * {@EC_PNAMEE} 親カラム名(一覧表示の場合でも行番号__nは付加されません) 1025 * {@EC_PVALUE} 親カラムの現在の値 1026 * 1027 * @og.rev 4.3.6.0 (2009/04/01) 1028 * @og.rev 5.1.7.0 (2010/06/01) コメント大幅修正 1029 * @param url イベントURL 1030 */ 1031 public void setEventURL( final String url ) { 1032 eventURL = nval( getRequestParameter( url ), eventURL ); 1033 } 1034 1035 /** 1036 * 【TAG】パラメータをセットします。 1037 * 1038 * @og.tag 1039 * EditorParam等のパラメータを一括でセットします。 1040 * eventColumn利用時は{@XXXX}はリクエストパラメータではなく 1041 * xxxカラムの実際の値が利用されます。 1042 * 1043 * @og.rev 4.3.6.0 (2009/04/01) 1044 * @param prm パラメータ 1045 */ 1046 public void setParam( final String prm ) { 1047 param = nval( prm, param ); // ここでは{@XXXX}変換をしない 1048 } 1049 1050 /** 1051 * 【TAG】データベースへ接続する場合のID。 1052 * 1053 * @og.tag 1054 * データベース接続を使用するエディター、レンデラーを使用する場合に使用する接続先IDを指定します。 1055 * カラムオブジェクトは、query処理ではなく、view処理時に適用されるため、データベース 1056 * 接続先を指定する必要があります。 1057 * 初期値は、null(DEFAULT 接続) です。 1058 * 1059 * @og.rev 5.7.6.2 (2014/05/16) 新規追加 1060 * 1061 * @param id 接続先ID 1062 */ 1063 public void setDbid( final String id ) { 1064 dbid = nval( getRequestParameter( id ),dbid ); 1065 } 1066 1067 /** 1068 * 【TAG】リクエスト情報の HTMLTag開始/終了文字(><) 存在チェックを実施するかどうか[true/false]を設定します 1069 * (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])。 1070 * 1071 * @og.tag 1072 * クロスサイトスクリプティング(XSS)対策の一環としてless/greater than signについてのチェックを行います。 1073 * (><) が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 1074 * (初期値:システム定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])。 1075 * 1076 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 1077 * 1078 * @param flag XSSチェック [true:する/false:しない] 1079 * @see org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK 1080 */ 1081 public void setXssCheck( final String flag ) { 1082 xssCheck = nval( getRequestParameter( flag ),xssCheck ); 1083 } 1084 1085 /** 1086 * 【TAG】MENU,DBMENUでSLABELを利用するかどうか[auto/true/false]を指定します(初期値:auto)。 1087 * 1088 * @og.tag 1089 * 通常はセレクトメニューは一覧とそれ以外で短縮ラベルの利用が自動で切り替わります。 1090 * 強制的にSLABELを利用させたい場合にこの属性をtrue/falseにセットして下さい。 1091 * 標準はauto(自動)です。 1092 * auto/true/false以外を指定した場合はfalse扱いとします。 1093 * 1094 * @og.rev 5.5.1.0 (2012/04/03) 1095 * @param prm [auto:自動/true:利用する/false:利用しない] 1096 */ 1097 public void setUseSLabel( final String prm ) { 1098 useSLabel = nval( getRequestParameter( prm ),useSLabel ); 1099 } 1100 1101 /** 1102 * 【TAG】eventColumn実行後のcallbak関数指定。 1103 * 1104 * @og.tag 1105 * eventColumnの動作終了後に実行するCallback関数の指定を行います。 1106 * 関数名のみを指定して下さい。 1107 * ex) sampleCallback()を実行する場合はeventCallback="sampleCallback" 1108 * 実行する関数の第一引数には自動的に次の要素が入った配列が渡されます 1109 * [0] 変更された子カラムのID属性値 1110 * [1] evnetColumn実行後の子カラムの値 1111 * [2] eventColumn実行前の子カラムの値 1112 * 1113 * この属性は、optionAttributesへの設定と同様の動作を行います。 1114 * 1115 * @og.rev 5.5.4.0 (2012/07/02) 新規追加 1116 * 1117 * @param callback callbak関数 1118 */ 1119 public void setEventCallback( final String callback ) { 1120 // optionAttributes扱いで登録します。 1121 if( callback != null && callback.length() > 0 ){ 1122 add( "optionAttributes", " eventCallback='"+getRequestParameter( callback )+"'" ); 1123 } 1124 } 1125 1126 /** 1127 * 【TAG】リアルタイムチェックを行わない指定。 1128 * 1129 * @og.tag 1130 * カラム単位でリアルタイムチェックを行わない設定をします。 1131 * タグに独自属性としてrealTimeChk="xxx"を追記します。 1132 * falseを設定した場合にチェックが行われなくなります。 1133 * 初期値はリアルタイムチェックを行う(何も指定しない)です。 1134 * 1135 * この属性は、optionAttributesへの設定と同様の動作を行います。 1136 * 1137 * @og.rev 5.9.32.2 (2018/05/18) 新規追加 1138 * 1139 * @param flg リアルタイムチェックを行うかどうか 1140 */ 1141 public void setUseRealTimeCheck( final String flg ) { 1142 String rtcf = getRequestParameter( flg ); 1143 // optionAttributes扱いで登録します。 1144 if( rtcf != null && rtcf.length() > 0 ){ 1145 add( "optionAttributes", " realTimeChk=\""+getRequestParameter( flg )+"\"" ); 1146 } 1147 } 1148 1149 /** 1150 * 【HTML5】表示形式を指定します(初期値:text)。 1151 * 1152 * @og.tag 1153 * ColumnTagは、カラムリソースで作成される為、タイプは固定です。 1154 * しかし、HTML5 で追加された形式には、有用なタイプも存在する為、 1155 * それらへの書き換えをできるようにします。 1156 * よって、ここでは、従来型のタイプへの書き換えはできません。 1157 * (textだけは例外で戻せるようにします)。 1158 * 1159 * [search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color] 1160 * が、設定できます。 1161 * 1162 * HTML5 の機能を有効にするには、ネイティブモードで動作させる必要があります。 1163 * @ USE_IE7_HEADER = "false" に設定する。 1164 * A USE_HTML5_HEADER = "true" に設定する。 1165 * B IEのツール⇒互換表示設定で、互換表示に追加したWebサイトから削除する。 1166 * C 同上の設定で、イントラサイトを互換表示で表示するのチェックを外す。 1167 * 必要があります。 1168 * 1169 * <og:input type="text" /> テキストボックスを表示 1170 * 1171 * HTML5 で追加されたタイプ 1172 * <og:input type="search" /> 検索テキストの入力欄を作成する 1173 * <og:input type="tel" /> 電話番号の入力欄を作成する 1174 * <og:input type="url" /> URLの入力欄を作成する 1175 * <og:input type="email" /> メールアドレスの入力欄を作成する 1176 * <og:input type="datetime" /> UTC(協定世界時)による日時の入力欄を作成する 1177 * <og:input type="date" /> 日付の入力欄を作成する 1178 * <og:input type="month" /> 月の入力欄を作成する 1179 * <og:input type="week" /> 週の入力欄を作成する 1180 * <og:input type="time" /> 時間の入力欄を作成する 1181 * <og:input type="datetime-local" /> UTC(協定世界時)によらないローカル日時の入力欄を作成する 1182 * <og:input type="number" /> 数値の入力欄を作成する 1183 * <og:input type="range" /> レンジの入力欄を作成する 1184 * <og:input type="color" /> 色の入力欄を作成する 1185 * 1186 * @og.rev 5.7.1.0 (2013/12/06) HTML5 対応(新規追加) 1187 * 1188 * @param type HTML5用 [text/search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color] 1189 */ 1190 public void setType( final String type ) { 1191 String tp = getRequestParameter( type ); 1192 1193 if( check( "|" + tp + "|" , CHECK_TYPE ) ) { 1194 set( "type",tp ); 1195 } 1196 else { 1197 String errMsg = "type 属性は、下記の中から選択してください。type=[" 1198 + tp + " in [" + CHECK_TYPE + "]"; 1199 throw new HybsSystemException( errMsg ); 1200 } 1201 } 1202 1203 /** 1204 * このオブジェクトの文字列表現を返します。 1205 * 基本的にデバッグ目的に使用します。 1206 * 1207 * @return このクラスの文字列表現 1208 */ 1209 @Override 1210 public String toString() { 1211 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 1212 .println( "VERSION" ,VERSION ) 1213 .println( "td_flag" ,td_flag ) 1214 .println( "addNoValue" ,addNoValue ) 1215 .println( "name" ,name ) 1216 .println( "value" ,value ) 1217 .println( "writable" ,writable ) 1218 .println( "defaultVal" ,defaultVal ) 1219 .println( "useDefVal" ,useDefVal ) 1220 .println( "colspan" ,colspan ) 1221 .println( "nextForm" ,nextForm ) 1222 .println( "useRequestValue" ,useRequestValue) 1223 .println( "vewSize" ,vewSize ) 1224 .println( "maxlength" ,maxlength ) 1225 .println( "codeName" ,codeName ) 1226 .println( "body" ,StringUtil.htmlFilter( body ) ) 1227 .println( "Other..." ,getAttributes().getAttribute() ) 1228 .fixForm().toString() ; 1229 } 1230}