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 static org.opengion.fukurou.util.StringUtil.nval; 019 020import java.io.IOException; 021import java.io.ObjectInputStream; 022import java.io.ObjectOutputStream; 023 024import org.opengion.fukurou.util.Options; 025import org.opengion.fukurou.util.StringUtil; 026import org.opengion.fukurou.util.TagBuffer; 027import org.opengion.fukurou.util.XHTMLTag; 028import org.opengion.hayabusa.common.HybsSystem; 029import org.opengion.hayabusa.common.HybsSystemException; 030 031/** 032 * プルダウンメニューを作成するHTML拡張タグです。 033 * 034 * プルダウンメニュー内の選択肢は、selectタグの内容であるoptionタグ、 035 * またはqueryOptionタグによって指定します。 036 * optionタグがセットされない場合は、name属性の、コードリソース からoption文字列より、 037 * プルダウンメニューの選択肢を作成します。 038 * name 属性に ラベルリソース のキーを与えることで、 ロケールにあわせたリソースを使用して、 039 * 画面に表示します。ロケールは、ユーザー情報の lang 属性を初期値で使用し、 040 * セットされていない場合は、リクエスト情報のロケールから取得します。 041 * language 属性で定義されている場合は、そちらを優先します。 042 * 043 * @og.formSample 044 * ●形式:<og:select name="…" /> 045 * ●body:あり(EVAL_BODY_INCLUDE:BODYをインクルードし、{@XXXX} は解析しません) 046 * 047 * ●Tag定義: 048 * <og:select 049 * name ○【TAG】メニューの名称を指定します(必須)。 050 * value 【TAG】値を指定します 051 * defaultVal 【TAG】value属性に値がセットされていないとき使用する、初期値を指定します 052 * lbl 【TAG】ラベルリソースのラベルIDを指定します 053 * must 【TAG】必須入力を表す色に変えるかどうか[true/false]を指定します(初期値:false) 054 * mustAny 【TAG】選択必須入力(どれかひとつ必須)を表す色[true/mustAny/その他]を指定します(初期値:無指定) 055 * addNoValue 【TAG】値なしのOptionを含めるかどうか[true/false]を指定します(初期値:false) 056 * td 【TAG】テーブル形式の <td> タグを使用するかどうか[yes/no/false]を指定します(初期値:yes) 057 * colspan 【TAG】フィールド部分の colspan を指定します 058 * optionAttributes 【TAG】JavaScript などの HTML基本タグ以外の属性を、そのままタグとして使用します 059 * size 【TAG】リストボックスとして表示する場合の表示行数を指定します 060 * multiple 【TAG】複数選択を可能(multiple)にします(初期値:未設定) 061 * id 【HTML】要素に対して固有の名前(id)をつける場合に設定します 062 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 063 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 064 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true) 065 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true) 066 * lang 【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します 067 * dir 【HTML】文字表記の方向(dir)を指定します 068 * title 【HTML】要素に対する補足的情報(title)を設定します 069 * style 【HTML】この要素に対して適用させるスタイルシート(style)を設定します 070 * disabled 【TAG】その部品に対して、選択や変更が出来ないように(disabled)指定します(サーバーに送信されない) 071 * tabindex 【HTML】タブの移動順(tabindex)を指定します(0 〜 32767) 072 * clazz 【HTML】要素に対して class 属性を設定します 073 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 074 * onClick 【HTML】JavaScriptのイベント onClick を設定します(例:onClick="renew('query.jsp','QUERY');") 075 * onChange 【HTML】JavaScriptのイベント onChange を設定します(例:onChange="renew('query.jsp','QUERY');") 076 * onBlur 【HTML】JavaScriptのイベント onBlur を設定します(例:onBlur="this.value=value.toUpperCase();") 077 * onFocus 【HTML】JavaScriptのイベント onFocus を設定します 078 * ondblClick 【HTML】JavaScriptのイベント ondblClick を設定します 079 * onMouseDown 【HTML】JavaScriptのイベント onMouseDown を設定します 080 * onMouseUp 【HTML】JavaScriptのイベント onMouseUp を設定します 081 * onMouseMove 【HTML】JavaScriptのイベント onMouseMove を設定します 082 * onMouseOut 【HTML】JavaScriptのイベント onMouseOut を設定します 083 * onMouseOver 【HTML】JavaScriptのイベント onMouseOver を設定します 084 * onSelect 【HTML】JavaScriptのイベント onSelect を設定します 085 * onKeydown 【HTML】JavaScriptのイベント onKeydown を設定します 086 * onKeypress 【HTML】JavaScriptのイベント onKeypress を設定します 087 * onKeyup 【HTML】JavaScriptのイベント onKeyup を設定します 088 * autofocus 【HTML5】指定した入力欄にカーソルが当たって自動的にフォーカスされます。 089 * roles 【TAG】ロールをセットします 090 * eventColumn 【TAG】イベントカラム(親カラム)を指定します 091 * eventURL 【TAG】イベントカラム指定時に呼び出すURL 092 * eventCallback 【TAG】eventColumn実行後のcallbak関数指定 093 * useRealTimeCheck 【TAG】リアルタイムチェックを行うかどうか(初期値:行う) 094 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 095 * > ... Body ... 096 * </og:select> 097 * 098 * ●使用例 099 * <og:select name="CDC"> CodeResource プロパティの値を使用したいときはcode属性を使います。 100 * <og:option code="CDC" /> 101 * </og:select> 102 * 103 * <og:select name="CDC"> 選択項目の一番上に項目を付け足すことも可能です。 104 * <og:option lbl="MSG0001" /> MessageResource プロパティの値を使用したいとききはlbl属性を使います。 105 * <og:option code="CDC" /> 106 * </og:select> 107 * 108 * <og:select name="CDC"> 選択項目の一番上に項目を付け足すことも可能です。 109 * <og:option lbl="CDC1" /> LabelResource プロパティの値を使用したいとききはlbl属性を使います。 110 * <og:option code="CDC" /> 111 * </og:select> 112 * 113 * <og:select name="CDC" multiple="multiple"> 選択肢の中から複数選択できるようにするときはmultiple属性を使います。 114 * <og:option code="CDC" /> 115 * </og:select> 116 * 117 * <og:select name="CDC" disabled="disabled"> 選択不可にするときはdisabled属性を使います。 118 * <og:option code="CDC" /> 119 * </og:select> 120 * 121 * <og:select name="CDC"> 選択肢をSELECT文の結果から作成したいときはqueryOptionタグと組み合わせて使います。 122 * <og:queryOption> 123 * select NOSYN,NOSYN,':',NMSYN from DB01 ORDER BY 1 124 * </og:queryOption> 125 * </og:select> 126 * 127 * <og:select name="CDC" eventColumn="OYA" > 親子関係のプルダウンを作る場合 128 * <og:queryOption> 129 * select NOSYN,NOSYN,':',NMSYN from DB01 130 * where CLM = "{@OYA}" ORDER BY 1 131 * </og:queryOption> 132 * </og:select> 133 * 134 * @og.group 選択データ制御 135 * 136 * @version 4.0 137 * @author Kazuhiko Hasegawa 138 * @since JDK5.0, 139 */ 140public class SelectTag extends HTMLTagSupport implements OptionAncestorIF { 141 //* このプログラムのVERSION文字列を設定します。 {@value} */ 142 private static final String VERSION = "5.7.1.0 (2013/12/06)" ; 143 144 private static final long serialVersionUID = 571020131206L ; 145 146 // 4.0.0 (2005/01/31) HTML_LABEL_SEPARATOR を boolean 変数として取得します。 147 private final String CLM = ( HybsSystem.sysBool( "HTML_LABEL_SEPARATOR" ) ) ? ":" : "" ; 148 149 // 4.0.0 (2005/01/31) USE_MULTI_KEY_SELECT を定義しておきます。 150 private final boolean USE_MULTI_KEY_SELECT = HybsSystem.sysBool( "USE_MULTI_KEY_SELECT" ) ; 151 152 // 4.3.6.0 (2009/04/01) JSPの位置を取っておく 153// private static final String JSP = HybsSystem.sys( "JSP" ); 154 155 private transient Options option = new Options(); 156 private String td_flag = "yes"; // yes:<td> タグを使用 / false:フィールドのみ / no:ラベルとフィールド 157 158 // 3.0.1.3 (2003/03/11) colspan 属性を追加。 159 private String colspan = null; 160 161 // 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 162 private String value = null; 163 private String defaultVal = null; // value がセットされていないときの初期値 164 private boolean multipleAll = false; // 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 165 private String eventColumn = null; // 4.3.6.0 (2009/04/01) イベントカラム 166// private String eventURL = JSP + "/" + HybsSystem.sys( "EVENT_COLUMN_URL" ); // 4.3.6.0 (2009/04/01) 処理JSPの設定 167 private String eventURL = null; // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応 168 169 // 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 170 // 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 171// private String mustType = null; // 4.1.2.1 (2008/03/13) 172 173 private String rawParam = null; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 174 175 // 5.1.9.0 (2010/08/01) 値なしのOptionをSelectに含めるかどうか 新規追加 176 private boolean addNoValue = false; // 互換性のため、初期値は、false になります。 177 178 /** 179 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 180 * 181 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 182 * @og.rev 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 183 * @og.rev 5.1.9.0 (2010/08/01) addNoValue 対応 184 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 185 * @og.rev 5.3.7.0 (2011/07/01) 5.1.7.0 (2010/06/01)の対応で判定条件が逆転しているバグを修正 186 * 187 * @return 後続処理の指示( EVAL_BODY_INCLUDE ) 188 */ 189 @Override 190 public int doStartTag() { 191 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 192 if( useTag() ) { 193 if( value == null ) { 194 // value = nval( getRequestValue( get( "name" ) ),defaultVal ); 195 // 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 196 String cmd = pageContext.getRequest().getParameter( "command" ); 197 if( "RENEW".equals( cmd ) ) { 198 value = StringUtil.array2line( getRequestValues( get( "name" ) ), "|" ); 199 } 200 else { 201 value = nval( StringUtil.array2line( getRequestValues( get( "name" ) ), "|" ),defaultVal ); 202 } 203 } 204 205 // 5.1.9.0 (2010/08/01) addNoValue 対応:option を最初にセットする。 206 if( addNoValue ) { 207 option.add( "<option value=\"\" ></option>" ); 208 } 209 210 return( EVAL_BODY_INCLUDE ); // Body インクルード( extends TagSupport 時) 211 } 212 return ( SKIP_BODY ); // Body を評価しない 213 } 214 215 /** 216 * タグリブオブジェクトをリリースします。 217 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 218 * 219 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 220 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 221 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 222 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 223 * @og.rev 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 224 * @og.rev 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 225 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 226 * @og.rev 4.3.6.0 (2009/04/01) eventColumn,eventURL追加 227 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 228 * @og.rev 5.1.9.0 (2010/08/01) columnタグで動的プルダウンが動作しない不具合に対応 229 * @og.rev 5.1.9.0 (2010/08/01) addNoValue 属性を追加。 230 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 231 * 232 */ 233 @Override 234 protected void release2() { 235 super.release2(); 236 option = new Options(); 237 td_flag = "yes"; // table形式の <td> タグを使用するかどうか 238 colspan = null; 239 value = null; 240 defaultVal = null; // value がセットされていないときの初期値 241 multipleAll = false; // 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 242// mustType = null; // 4.1.2.1 (2008/03/13) // HTMLTagSupport に移します。 243 eventColumn = null; // 4.3.6.0 (2009/04/01) 244// eventURL = JSP + "/" + HybsSystem.sys( "EVENT_COLUMN_URL" ); // 4.3.6.0 (2009/04/01) 245 eventURL = null; // 5.1.9.0 (2010/08/01) columnタグで動的プルダウンが動作しない不具合に対応 246 rawParam = null; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 247 addNoValue = false; // 5.1.9.0 (2010/08/01) 互換性のため、初期値は、false になります。 248 } 249 250 /** 251 * 入力用のプルダウンメニューを作成します。 252 * 253 * 表示順の項目名タグは、あらかじめ作成済みの値をここでは受け取ります。 254 * hasSelect 属性の値に応じて,タグの作成方法は変わります。 255 * 256 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 257 * @og.rev 2.0.1.0 (2002/10/10) ラベルとフィールドのセパレーターとして、コロン(:)を使用するかどうかを指定できる 258 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 259 * @og.rev 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 260 * @og.rev 4.0.0.0 (2005/01/31) マルチセレクションのON/OFFをここで指定。 261 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 262 * @og.rev 4.3.6.0 (2009/04/01) eventColumn対応 263 * @og.rev 4.3.7.1 (2009/06/08) id=labelのclass化 264 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 265 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 266 * @og.rev 5.5.3.0 (2012/06/01) idのセット見直し 267 * @og.rev 5.6.2.2 (2013/03/15) 自動must処理の出力位置を変更 268 * 269 * @return 表示順選択用のプルダウンメニュータグ 270 */ 271 @Override 272 protected String makeTag() { 273 274 String name = get( "name" ); 275 if( getMsglbl() == null ) { setLbl( name ); } 276 277 if( colspan != null ) { 278 colspan = " colspan=\"" + colspan + "\" "; 279 } 280 else { 281 colspan = ""; 282 } 283 284 // 4.0.0 (2005/01/31) XHTMLTag.java より移動) 285 if( USE_MULTI_KEY_SELECT ) { 286 set( "onkeydown", "setKeySelect(this);" ); 287 } 288 289 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 290 291 // 5.5.3.0 既にIDが指定されている場合はnameをセットしない 292 if( get("id")==null || get("id").length() == 0 ){ 293 set( "id", name ); 294 } 295 296 // 4.3.6.0 (2009/04/01) eventColumnの対応 297 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 298// if( eventColumn != null && eventColumn.length() > 0 ) { 299// String[] evntCols = StringUtil.csv2Array( eventColumn ); 300// for( int i = 0; i < evntCols.length; i++ ) { 301// // SelectTagは"DBMENU"をmakeColumnに渡す。 302// String javaScript = 303// "<script type=\"text/javascript\">" + 304// "$(function(){$('#" + evntCols[i] + "').change(function(){" + 305// "makeColumn('" + name + "','" + name + "',EC_" + name + ",'DBMENU','" + eventURL + "');}).change();});"+ 306// "</script>" 307// ; 308// rtn.append( javaScript ); 309// } 310// } 311 312 String selTag = XHTMLTag.select( getAttributes(), option ); 313 314 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 315 if( eventColumn != null && eventColumn.length() > 0 ) { 316 String editor = null; 317 if( rawParam != null && rawParam.length() > 0 ) { 318 editor = "DBMENU"; 319 } 320 else { 321 editor = "MENU"; 322 } 323 addEventColumn( name, eventColumn, eventURL, "", editor, "", rawParam ); 324 TagBuffer span = new TagBuffer( "span" ); 325 span.add( "class", HybsSystem.EVENT_COLUMN_CLASS ); 326 span.add( HybsSystem.EVENT_COLUMN_ID, name ); 327 span.add( HybsSystem.EVENT_COLUMN_INITVAL, value ); 328 span.add( HybsSystem.EVENT_COLUMN_WRITABLE, "true" ); 329 span.setBody( selTag ); 330 selTag = span.makeTag(); 331 } 332 333 if( "yes".equals( td_flag ) ) { 334 // 4.3.7.1 (2009/06/08) id=labelのclass化 335 // rtn.append( "<td id=\"label\">" ); 336 rtn.append( "<td class=\"label\">" ); 337 rtn.append( getLongLabel() ); // 4.0.0 (2005/01/31) 338 rtn.append( CLM ); 339 rtn.append( "</td>" ); 340 rtn.append( "<td" ); 341 rtn.append( colspan ); 342 rtn.append( ">" ); 343// rtn.append( XHTMLTag.select( getAttributes(), option ) ); 344 rtn.append( selTag ); 345 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 346 rtn.append( "</td>" ); 347 } 348 else if( "no".equals( td_flag ) ) { 349 // 4.3.7.1 (2009/06/08) id=labelのclass化 350 // rtn.append( "<span id=\"label\">" ); 351 rtn.append( "<span class=\"label\">" ); 352 rtn.append( getLongLabel() ); // 4.0.0 (2005/01/31) 353 rtn.append( CLM ); 354 rtn.append( "</span>" ); 355// rtn.append( XHTMLTag.select( getAttributes(), option ) ); 356 rtn.append( selTag ); 357 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 358 } 359 else { 360// rtn.append( XHTMLTag.select( getAttributes(), option ) ); 361 rtn.append( selTag ); 362 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 363 } 364 365 // 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 366// if( mustType != null ) { 367// rtn.append( XHTMLTag.hidden( HybsSystem.MUST_KEY + mustType, name ) ); 368// } 369 // 5.2.1.0 (2010/10/01) must , mustAny 属性を自動化します。 370 // 5.6.2.2 (2013/03/15) tdの外に出力される不正形を正します 371// if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } 372 373 return rtn.toString() ; 374 } 375 376 /** 377 * メニュー項目の選択項目を追加します。 378 * 379 * select タグのBODY要素の OptionTag よりアクセスされます。 380 * 381 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージ内部で使用している箇所を protected 化する。 382 * @param opt オプションタグ文字列 383 */ 384 public void addOption( final String opt ) { 385 option.add( opt ); 386 } 387 388 /** 389 * 【TAG】メニューの名称を指定します。 390 * 391 * @og.tag メニューの名称を指定します。 392 * 393 * @param name 名称 394 */ 395 public void setName( final String name ) { 396 set( "name", getRequestParameter( name ) ); 397 } 398 399 /** 400 * 【TAG】リストボックスとして表示する場合の表示行数を指定します。 401 * 402 * @og.tag 表示行数を指定します。 403 * 404 * @param size 表示行数 405 */ 406 public void setSize( final String size ) { 407 set( "size",getRequestParameter( size ) ); 408 } 409 410 /** 411 * 【TAG】複数選択を可能(multiple)にします(初期値:未設定)。 412 * 413 * @og.tag 414 * multiple 値が "multiple" または "true" の場合、複数選択状態になります。 415 * また、"ALL" を設定する場合は、OptionTag上で、すべてのOption が選択状態に 416 * 初期設定されます。 417 * 大文字、小文字の種別はなくしますが、指定以外の文字が設定された場合は、エラーになります。 418 * 419 * @og.rev 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 420 * 421 * @param multi 複数選択("multiple" または "true") ,初期値全選択( "ALL" ) 422 */ 423 public void setMultiple( final String multi ) { 424 String multiple = nval( getRequestParameter( multi ),null ); 425 if( "multiple".equalsIgnoreCase( multiple ) || "true".equalsIgnoreCase( multiple ) ) { 426 set( "multiple","multiple" ); 427 } 428 else if( "ALL".equalsIgnoreCase( multiple ) ) { 429 set( "multiple","multiple" ); 430 multipleAll = true; 431 } 432 else if( ! ( "false".equalsIgnoreCase( multiple ) || multiple == null ) ) { 433 String errMsg = "multiple 属性には、[multiple,true,ALL] 以外は設定できません。" 434 + "multiple=" + multi ; 435 throw new HybsSystemException( errMsg ); 436 } 437 } 438 439 /** 440 * 【TAG】必須入力を表す色に変えるかどうか[true/false]指定します(初期値:false)。 441 * 442 * @og.tag 443 * 初期値は、必須でない("false") です。 444 * 445 * @og.rev 4.0.0.0 (2005/02/28) must属性の登録を、id属性から、class 属性に変更します。 446 * @og.rev 4.1.2.1 (2008/03/13) must属性を自動化します。 447 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 448 * 449 * @param flag 必須入力 ("true")/必須でない (それ以外) 450 */ 451// public void setMust( final String flag ) { 452//// boolean must = nval( getRequestParameter( flag ),false ); 453// mustType = nval( getRequestParameter( flag ),null ); 454// if( "true".equalsIgnoreCase( mustType ) ) { 455// mustType = "must"; 456// add( "class","must" ); 457// } 458// } 459 460 /** 461 * 【TAG】選択必須入力(どれかひとつ必須)を表す色(true|mustAny|その他)を指定します(初期値:無指定)。 462 * 463 * @og.tag 464 * 複数のカラムのうち、どれかひとつを必須とする選択必須入力を示す色を指定します。 465 * true または、mustAny を設定すると、class属性に、mustAny がセットされます。 466 * mustAny は、CSSファイルに初期設定されています。true または、mustAny 以外の値をセット 467 * すると、その値がそのまま、class属性にセットされますので、選択必須のグループ化が 468 * 可能です。 469 * なお、実際の選択必須入力チェックは、ここではなく、columnCheck タグで指定が必要です。 470 * 自動処理は、mustAny="true" 指定の場合のみ有効です。 471 * 初期値は、無指定です。 472 * 473 * @og.rev 3.8.0.9 (2005/10/17) 新規追加 474 * @og.rev 4.1.2.1 (2008/03/13) mustAny属性を自動化します。 475 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 476 * 477 * @param flag 選択必須入力(どれかひとつ必須)を表す色を指定(true|mustAny|その他) 478 */ 479// public void setMustAny( final String flag ) { 480// if( mustType == null ) { // must 属性と同時設定時には、must 属性を優先します。 481// mustType = nval( getRequestParameter( flag ),null ); 482// if( "true".equalsIgnoreCase( mustType ) ) { 483// mustType = "mustAny"; 484// } 485// add( "class",mustType ); // mustType == null の場合は、add されません。 486// } 487// 488//// String str = nval( getRequestParameter( flag ),null ); 489//// if( str != null ) { 490//// if( str.equalsIgnoreCase( "true" ) ) { 491//// add( "class","mustAny" ); 492//// } 493//// else { 494//// add( "class",str ); 495//// } 496//// } 497// } 498 499 /** 500 * 【TAG】テーブル形式の <td> タグを使用するかどうか[yes/no/false]を指定します(初期値:yes)。 501 * 502 * @og.tag 503 * 初期値は、使用する("yes") です。 504 * 505 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 506 * @og.rev 5.5.1.0 (2012/04/03) エラーメッセージ変更 507 * 508 * @param flag [yes:tdタグを使用/no:ラベルとフィールド/false:フィールドのみ] 509 */ 510 public void setTd( final String flag ) { 511 String td = nval( getRequestParameter( flag ),td_flag ); 512 513 if( check( "|" + td + "|" , "|yes|no|false|" ) ) { 514 td_flag = td; 515 } 516 else { 517 String errMsg = "Error in SelectTag [td]: " + td; 518 //errMsg = errMsg + " in [|true|false|label|] only used"; 519 errMsg = errMsg + " in [|yes|no|false|] only used"; // 5.5.1.0 (2012/04/03) 520 throw new HybsSystemException( errMsg ); 521 } 522 } 523 524 /** 525 * 【TAG】フィールド部分の colspan を指定します。 526 * 527 * @og.tag 528 * 通常は、3 を指定して、フィールド、ラベル、フィールドの 529 * 組み合わせ部分に、長いフィールドが適用されるように使用します。 530 * 531 * <og:select name="CDK" colspan="3" /> 532 * 533 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 534 * 535 * @param sp フィールド部分の colspan 536 */ 537 public void setColspan( final String sp ) { 538 colspan = nval( getRequestParameter( sp ),colspan ); 539 } 540 541 /** 542 * 【TAG】値を指定します。 543 * 544 * @og.tag 545 * ここで指定された値が、optionタグの値と同じであれば、選択状態になります。 546 * 547 * <og:select name="CDC" value="{@ABC}" defaultVal="XYZ" > 548 * <og:option value="ABC" lbl="CDC1" /> 549 * <og:option value="XYZ" lbl="CDC2" /> 550 * </og:select> 551 * 552 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 553 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 554 * 555 * @param val 値 556 */ 557 public void setValue( final String val ) { 558// value = nval( getRequestParameter( val ),value ); 559 value = nval( StringUtil.array2line( getRequestParameterValues( val ), "|" ),value ); 560 } 561 562 /** 563 * 値を外部から取り出します。 564 * 565 * OptionTag で、value を取り出して、内部の値と同じ場合は、選択状態にします。 566 * 567 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 568 * @og.rev 5.7.1.0 (2013/12/06) OptionAncestorIF にする為、protected ⇒ public 化する。 569 * 570 * @return 内部に設定された値 571 */ 572// protected String getValue() { 573 public String getValue() { 574 return value; 575 } 576 577// /** 578// * 親のカラムを取得 579// * 580// * QueryOptiontagで、eventColumnを取り出して生SQL文の 581// * セッションへの登録判断をします 582// * 583// * @og.rev 4.3.6.0 (2009/04/01) 584// * 585// * @return イベントカラム 586// */ 587// protected String getEventColumn() { 588// return eventColumn; 589// } 590 591 /** 592 * 【TAG】イベントカラム(親カラム)を指定します。 593 * 594 * @og.tag 595 * 親子関係のカラムを作成する場合に利用します。 596 * queryOptionタグとセットで利用して下さい。 597 * 598 * ※詳細はcolumnTagのeventColumn属性の説明をご覧下さい。 599 * 600 * @og.rev 4.3.6.0 (2009/04/01) 601 * 602 * @param col 親カラム名 603 */ 604 public void setEventColumn( final String col ) { 605 eventColumn = nval( getRequestParameter( col ), eventColumn ); 606 } 607 608 /** 609 * 【TAG】イベントカラム指定時に呼び出すURL。 610 * 611 * @og.tag 612 * イベントカラム指定時に部品を作成するJSPを指定します。 613 * 初期値はシステムリソースのEVENT_COLUMN_URLです。 614 * (例:eventURL="makeColumn_custom.jsp") 615 * 616 * ※詳細はcolumnTagのeventURL属性の説明をご覧下さい。 617 * 618 * @og.rev 4.3.6.0 (2009/04/01) 619 * 620 * @param url 呼び出すURL 621 */ 622 public void setEventURL( final String url ) { 623 eventURL = nval( getRequestParameter( url ), eventURL ); 624 } 625 626 /** 627 * 複数選択可能時に全選択を設定するかどうかを返します。 628 * 629 * これは、上位入れ子のタグの OptionTag で、multipleAll を取り出して、 630 * true であれば、全選択に設定します。 631 * 632 * @og.rev 3.8.0.9 (2005/10/17) 新規作成 633 * @og.rev 5.7.1.0 (2013/12/06) OptionAncestorIF にする為、protected ⇒ public 化する。 634 * 635 * @return 全選択:true / 通常:false 636 */ 637// protected boolean isMultipleAll() { 638 public boolean isMultipleAll() { 639 return multipleAll; 640 } 641 642 /** 643 * 【TAG】value属性に値がセットされていないとき使用する、初期値を指定します。 644 * 645 * @og.tag 646 * value属性に値がセットされていないときに、初期値をセットします。 647 * 648 * なお、commandがRENEWの場合は、このdefaultValは適用されません。 649 * これは、defaultValの値が埋め込まれた項目が存在する画面に戻った際に、 650 * defaultValの項目の値がnullとなっていた場合に、defaultValの値が復元されると、 651 * 検索結果との不一致が発生するためです。 652 * 653 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 654 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 655 * 656 * @param dv 初期値 657 */ 658 public void setDefaultVal( final String dv ) { 659// defaultVal = nval( getRequestParameter( dv ),defaultVal ); 660 defaultVal = nval( StringUtil.array2line( getRequestParameterValues( dv ), "|" ),defaultVal ); 661 } 662 663 /** 664 * 【TAG】値なしのOptionを含めるかどうか[true/false]を指定します(初期値:false)。 665 * 666 * @og.tag 667 * カラムがプルダウンメニュー形式の場合、選択肢には通常データベース登録できる候補が 668 * 並びます。しかし、検索時には、候補を絞りたくない(指定しない)場合があり、 669 * その様な場合には、値なしのOptionを含める(true)ことで、対応可能です。 670 * 初期値:false(値なしのOptionを含めない)は、過去の互換性を重視しているため、column タグと異なります。 671 * 672 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 673 * 674 * @param flag [true:含める/それ以外:含めない] 675 */ 676 public void setAddNoValue( final String flag ) { 677 addNoValue = nval( getRequestParameter( flag ),addNoValue ); 678 } 679 680 /** 681 * パラメーター変換({@XXXX}の置き換えをしない状態のパラメーターをセットします。 682 * 683 * @og.rev 5.1.7.0 (2010/06/01) 新規作成(動的プルダウン実装見直し) 684 * @og.rev 5.5.4.0 (2012/07/02) 予約語対応 685 * 686 * @param param パラメーター 687 */ 688 public void setRawParam( final String param ) { 689// rawParam = nval( param, rawParam ); 690 rawParam = nval( getReservedParameter(param), rawParam ); // 5.5.4.0 (2012/07/02) 691 } 692 693 /** 694 * 【TAG】eventColumn実行後のcallbak関数指定。 695 * 696 * @og.tag 697 * eventColumnの動作終了後に実行するCallback関数の指定を行います。 698 * 関数名のみを指定して下さい。 699 * ex) sampleCallback()を実行する場合はeventCallback="sampleCallback" 700 * 実行する関数の第一引数には自動的に次の要素が入った配列が渡されます 701 * [0] 変更された子カラムのID属性値 702 * [1] evnetColumn実行後の子カラムの値 703 * [2] eventColumn実行前の子カラムの値 704 * 705 * この属性は、optionAttributesへの設定と同様の動作を行います。 706 * 707 * @og.rev 5.5.4.0 (2012/07/02) 新規追加 708 * 709 * @param callback callbak関数 710 */ 711 public void setEventCallback( final String callback ) { 712 // optionAttributes扱いで登録します。 713 if( callback != null && callback.length() > 0 ){ 714 add( "optionAttributes", "eventCallback='"+getRequestParameter( callback )+"'" ); 715 } 716 } 717 718 /** 719 * 【TAG】リアルタイムチェックを行わない指定。 720 * 721 * @og.tag 722 * カラム単位でリアルタイムチェックを行わない設定をします。 723 * タグに独自属性としてrealTimeChk="xxx"を追記します。 724 * falseを設定した場合にチェックが行われなくなります。 725 * 初期値はリアルタイムチェックを行う(何も指定しない)です。 726 * 727 * この属性は、optionAttributesへの設定と同様の動作を行います。 728 * 729 * @og.rev 5.9.32.2 (2018/05/18) 新規追加 730 * 731 * @param flg リアルタイムチェックを行うかどうか 732 */ 733 public void setUseRealTimeCheck( final String flg ) { 734 String rtcf = getRequestParameter( flg ); 735 // optionAttributes扱いで登録します。 736 if( rtcf != null && rtcf.length() > 0 ){ 737 add( "optionAttributes", " realTimeChk=\""+getRequestParameter( flg )+"\"" ); 738 } 739 } 740 741 /** 742 * シリアライズ用のカスタムシリアライズ書き込みメソッド 743 * 744 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 745 * @serialData 一部のオブジェクトは、シリアライズされません。 746 * 747 * @param strm ObjectOutputStreamオブジェクト 748 * @throws IOException 入出力エラーが発生した場合 749 */ 750 private void writeObject( final ObjectOutputStream strm ) throws IOException { 751 strm.defaultWriteObject(); 752 } 753 754 /** 755 * シリアライズ用のカスタムシリアライズ読み込みメソッド 756 * 757 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 758 * 759 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 760 * @serialData 一部のオブジェクトは、シリアライズされません。 761 * 762 * @param strm ObjectInputStreamオブジェクト 763 * @see #release2() 764 * @throws IOException シリアライズに関する入出力エラーが発生した場合 765 * @throws ClassNotFoundException クラスを見つけることができなかった場合 766 */ 767 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 768 strm.defaultReadObject(); 769 option = new Options(); 770 } 771 772 /** 773 * このオブジェクトの文字列表現を返します。 774 * 基本的にデバッグ目的に使用します。 775 * 776 * @return このクラスの文字列表現 777 */ 778 @Override 779 public String toString() { 780 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 781 .println( "VERSION" ,VERSION ) 782 .println( "td_flag" ,td_flag ) 783 .println( "colspan" ,colspan ) 784 .println( "value" ,value ) 785 .println( "defaultVal" ,defaultVal ) 786 .println( "multipleAll" ,multipleAll ) 787 .println( "Other..." ,getAttributes().getAttribute() ) 788 .fixForm().toString() ; 789 } 790}