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 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 094 * > ... Body ... 095 * </og:select> 096 * 097 * ●使用例 098 * <og:select name="CDC"> CodeResource プロパティの値を使用したいときはcode属性を使います。 099 * <og:option code="CDC" /> 100 * </og:select> 101 * 102 * <og:select name="CDC"> 選択項目の一番上に項目を付け足すことも可能です。 103 * <og:option lbl="MSG0001" /> MessageResource プロパティの値を使用したいとききはlbl属性を使います。 104 * <og:option code="CDC" /> 105 * </og:select> 106 * 107 * <og:select name="CDC"> 選択項目の一番上に項目を付け足すことも可能です。 108 * <og:option lbl="CDC1" /> LabelResource プロパティの値を使用したいとききはlbl属性を使います。 109 * <og:option code="CDC" /> 110 * </og:select> 111 * 112 * <og:select name="CDC" multiple="multiple"> 選択肢の中から複数選択できるようにするときはmultiple属性を使います。 113 * <og:option code="CDC" /> 114 * </og:select> 115 * 116 * <og:select name="CDC" disabled="disabled"> 選択不可にするときはdisabled属性を使います。 117 * <og:option code="CDC" /> 118 * </og:select> 119 * 120 * <og:select name="CDC"> 選択肢をSELECT文の結果から作成したいときはqueryOptionタグと組み合わせて使います。 121 * <og:queryOption> 122 * select NOSYN,NOSYN,':',NMSYN from DB01 ORDER BY 1 123 * </og:queryOption> 124 * </og:select> 125 * 126 * <og:select name="CDC" eventColumn="OYA" > 親子関係のプルダウンを作る場合 127 * <og:queryOption> 128 * select NOSYN,NOSYN,':',NMSYN from DB01 129 * where CLM = "{@OYA}" ORDER BY 1 130 * </og:queryOption> 131 * </og:select> 132 * 133 * @og.group 選択データ制御 134 * 135 * @version 4.0 136 * @author Kazuhiko Hasegawa 137 * @since JDK5.0, 138 */ 139public class SelectTag extends HTMLTagSupport implements OptionAncestorIF { 140 //* このプログラムのVERSION文字列を設定します。 {@value} */ 141 private static final String VERSION = "5.7.1.0 (2013/12/06)" ; 142 143 private static final long serialVersionUID = 571020131206L ; 144 145 // 4.0.0 (2005/01/31) HTML_LABEL_SEPARATOR を boolean 変数として取得します。 146 private final String CLM = HybsSystem.sysBool( "HTML_LABEL_SEPARATOR" ) ? ":" : "" ; 147 148 // 4.0.0 (2005/01/31) USE_MULTI_KEY_SELECT を定義しておきます。 149 private final boolean USE_MULTI_KEY_SELECT = HybsSystem.sysBool( "USE_MULTI_KEY_SELECT" ) ; 150 151 private transient Options option = new Options(); 152 private String td_flag = "yes"; // yes:<td> タグを使用 / false:フィールドのみ / no:ラベルとフィールド 153 154 // 3.0.1.3 (2003/03/11) colspan 属性を追加。 155 private String colspan = null; 156 157 // 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 158 private String value = null; 159 private String defaultVal = null; // value がセットされていないときの初期値 160 private boolean multipleAll = false; // 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 161 private String eventColumn = null; // 4.3.6.0 (2009/04/01) イベントカラム 162 private String eventURL = null; // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応 163 164 private String rawParam = null; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 165 166 // 5.1.9.0 (2010/08/01) 値なしのOptionをSelectに含めるかどうか 新規追加 167 private boolean addNoValue = false; // 互換性のため、初期値は、false になります。 168 169 /** 170 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 171 * 172 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 173 * @og.rev 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 174 * @og.rev 5.1.9.0 (2010/08/01) addNoValue 対応 175 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 176 * @og.rev 5.3.7.0 (2011/07/01) 5.1.7.0 (2010/06/01)の対応で判定条件が逆転しているバグを修正 177 * 178 * @return 後続処理の指示( EVAL_BODY_INCLUDE ) 179 */ 180 @Override 181 public int doStartTag() { 182 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 183 if( useTag() ) { 184 if( value == null ) { 185 // value = nval( getRequestValue( get( "name" ) ),defaultVal ); 186 // 5.1.7.0 (2010/06/01) command=RENEWの場合はdefaultValを無視する。 187 String cmd = pageContext.getRequest().getParameter( "command" ); 188 if( "RENEW".equals( cmd ) ) { 189 value = StringUtil.array2line( getRequestValues( get( "name" ) ), "|" ); 190 } 191 else { 192 value = nval( StringUtil.array2line( getRequestValues( get( "name" ) ), "|" ),defaultVal ); 193 } 194 } 195 196 // 5.1.9.0 (2010/08/01) addNoValue 対応:option を最初にセットする。 197 if( addNoValue ) { 198 option.add( "<option value=\"\" ></option>" ); 199 } 200 201 return EVAL_BODY_INCLUDE ; // Body インクルード( extends TagSupport 時) 202 } 203 return SKIP_BODY ; // Body を評価しない 204 } 205 206 /** 207 * タグリブオブジェクトをリリースします。 208 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 209 * 210 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 211 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 212 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 213 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 214 * @og.rev 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 215 * @og.rev 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 216 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 217 * @og.rev 4.3.6.0 (2009/04/01) eventColumn,eventURL追加 218 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 219 * @og.rev 5.1.9.0 (2010/08/01) columnタグで動的プルダウンが動作しない不具合に対応 220 * @og.rev 5.1.9.0 (2010/08/01) addNoValue 属性を追加。 221 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 222 * 223 */ 224 @Override 225 protected void release2() { 226 super.release2(); 227 option = new Options(); 228 td_flag = "yes"; // table形式の <td> タグを使用するかどうか 229 colspan = null; 230 value = null; 231 defaultVal = null; // value がセットされていないときの初期値 232 multipleAll = false; // 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 233 eventColumn = null; // 4.3.6.0 (2009/04/01) 234 eventURL = null; // 5.1.9.0 (2010/08/01) columnタグで動的プルダウンが動作しない不具合に対応 235 rawParam = null; // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 236 addNoValue = false; // 5.1.9.0 (2010/08/01) 互換性のため、初期値は、false になります。 237 } 238 239 /** 240 * 入力用のプルダウンメニューを作成します。 241 * 242 * 表示順の項目名タグは、あらかじめ作成済みの値をここでは受け取ります。 243 * hasSelect 属性の値に応じて,タグの作成方法は変わります。 244 * 245 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 246 * @og.rev 2.0.1.0 (2002/10/10) ラベルとフィールドのセパレーターとして、コロン(:)を使用するかどうかを指定できる 247 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 248 * @og.rev 3.5.4.0 (2003/11/25) value ,defaultVal 属性を追加。 249 * @og.rev 4.0.0.0 (2005/01/31) マルチセレクションのON/OFFをここで指定。 250 * @og.rev 4.1.2.1 (2008/03/13) must , mustAny 属性を自動化します。 251 * @og.rev 4.3.6.0 (2009/04/01) eventColumn対応 252 * @og.rev 4.3.7.1 (2009/06/08) id=labelのclass化 253 * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 254 * @og.rev 5.2.1.0 (2010/10/01) must , mustAny 属性の処理を、HTMLTagSupport に移します。 255 * @og.rev 5.5.3.0 (2012/06/01) idのセット見直し 256 * @og.rev 5.6.2.2 (2013/03/15) 自動must処理の出力位置を変更 257 * 258 * @return 表示順選択用のプルダウンメニュータグ 259 */ 260 @Override 261 protected String makeTag() { 262 263 String name = get( "name" ); 264 if( getMsglbl() == null ) { setLbl( name ); } 265 266 if( colspan != null ) { 267 colspan = " colspan=\"" + colspan + "\" "; 268 } 269 else { 270 colspan = ""; 271 } 272 273 // 4.0.0 (2005/01/31) XHTMLTag.java より移動) 274 if( USE_MULTI_KEY_SELECT ) { 275 set( "onkeydown", "setKeySelect(this);" ); 276 } 277 278 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 279 280 // 5.5.3.0 既にIDが指定されている場合はnameをセットしない 281 if( get("id")==null || get("id").length() == 0 ){ 282 set( "id", name ); 283 } 284 285 // 4.3.6.0 (2009/04/01) eventColumnの対応 286 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 287 String selTag = XHTMLTag.select( getAttributes(), option ); 288 289 // 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し 290 if( eventColumn != null && eventColumn.length() > 0 ) { 291 String editor = null; 292 if( rawParam != null && rawParam.length() > 0 ) { 293 editor = "DBMENU"; 294 } 295 else { 296 editor = "MENU"; 297 } 298 addEventColumn( name, eventColumn, eventURL, "", editor, "", rawParam ); 299 TagBuffer span = new TagBuffer( "span" ); 300 span.add( "class", HybsSystem.EVENT_COLUMN_CLASS ); 301 span.add( HybsSystem.EVENT_COLUMN_ID, name ); 302 span.add( HybsSystem.EVENT_COLUMN_INITVAL, value ); 303 span.add( HybsSystem.EVENT_COLUMN_WRITABLE, "true" ); 304 span.setBody( selTag ); 305 selTag = span.makeTag(); 306 } 307 308 if( "yes".equals( td_flag ) ) { 309 // 4.3.7.1 (2009/06/08) id=labelのclass化 310 // rtn.append( "<td id=\"label\">" ); 311 rtn.append( "<td class=\"label\">" ); 312 rtn.append( getLongLabel() ); // 4.0.0 (2005/01/31) 313 rtn.append( CLM ); 314 rtn.append( "</td>" ); 315 rtn.append( "<td" ); 316 rtn.append( colspan ); 317 rtn.append( ">" ); 318 rtn.append( selTag ); 319 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 320 rtn.append( "</td>" ); 321 } 322 else if( "no".equals( td_flag ) ) { 323 // 4.3.7.1 (2009/06/08) id=labelのclass化 324 // rtn.append( "<span id=\"label\">" ); 325 rtn.append( "<span class=\"label\">" ); 326 rtn.append( getLongLabel() ); // 4.0.0 (2005/01/31) 327 rtn.append( CLM ); 328 rtn.append( "</span>" ); 329 rtn.append( selTag ); 330 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 331 } 332 else { 333 rtn.append( selTag ); 334 if( getMustType() != null ) { rtn.append( makeMustHidden( name ) ); } // 5.6.2.2 (2013/03/15) 335 } 336 337 return rtn.toString() ; 338 } 339 340 /** 341 * メニュー項目の選択項目を追加します。 342 * 343 * select タグのBODY要素の OptionTag よりアクセスされます。 344 * 345 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージ内部で使用している箇所を protected 化する。 346 * @param opt オプションタグ文字列 347 */ 348 public void addOption( final String opt ) { 349 option.add( opt ); 350 } 351 352 /** 353 * 【TAG】メニューの名称を指定します。 354 * 355 * @og.tag メニューの名称を指定します。 356 * 357 * @param name 名称 358 */ 359 public void setName( final String name ) { 360 set( "name", getRequestParameter( name ) ); 361 } 362 363 /** 364 * 【TAG】リストボックスとして表示する場合の表示行数を指定します。 365 * 366 * @og.tag 表示行数を指定します。 367 * 368 * @param size 表示行数 369 */ 370 public void setSize( final String size ) { 371 set( "size",getRequestParameter( size ) ); 372 } 373 374 /** 375 * 【TAG】複数選択を可能(multiple)にします(初期値:未設定)。 376 * 377 * @og.tag 378 * multiple 値が "multiple" または "true" の場合、複数選択状態になります。 379 * また、"ALL" を設定する場合は、OptionTag上で、すべてのOption が選択状態に 380 * 初期設定されます。 381 * 大文字、小文字の種別はなくしますが、指定以外の文字が設定された場合は、エラーになります。 382 * 383 * @og.rev 3.8.0.9 (2005/10/17) 複数選択可能時に全選択を設定する。 384 * 385 * @param multi 複数選択("multiple" または "true") ,初期値全選択( "ALL" ) 386 */ 387 public void setMultiple( final String multi ) { 388 String multiple = nval( getRequestParameter( multi ),null ); 389 if( "multiple".equalsIgnoreCase( multiple ) || "true".equalsIgnoreCase( multiple ) ) { 390 set( "multiple","multiple" ); 391 } 392 else if( "ALL".equalsIgnoreCase( multiple ) ) { 393 set( "multiple","multiple" ); 394 multipleAll = true; 395 } 396 else if( ! ( "false".equalsIgnoreCase( multiple ) || multiple == null ) ) { 397 String errMsg = "multiple 属性には、[multiple,true,ALL] 以外は設定できません。" 398 + "multiple=" + multi ; 399 throw new HybsSystemException( errMsg ); 400 } 401 } 402 403 /** 404 * 【TAG】テーブル形式の <td> タグを使用するかどうか[yes/no/false]を指定します(初期値:yes)。 405 * 406 * @og.tag 407 * 初期値は、使用する("yes") です。 408 * 409 * @og.rev 2.0.0.8 (2002/10/09) yes/no/false で指定するように変更 410 * @og.rev 5.5.1.0 (2012/04/03) エラーメッセージ変更 411 * 412 * @param flag [yes:tdタグを使用/no:ラベルとフィールド/false:フィールドのみ] 413 */ 414 public void setTd( final String flag ) { 415 String td = nval( getRequestParameter( flag ),td_flag ); 416 417 if( check( "|" + td + "|" , "|yes|no|false|" ) ) { 418 td_flag = td; 419 } 420 else { 421 String errMsg = "Error in SelectTag [td]: " + td; 422 //errMsg = errMsg + " in [|true|false|label|] only used"; 423 errMsg = errMsg + " in [|yes|no|false|] only used"; // 5.5.1.0 (2012/04/03) 424 throw new HybsSystemException( errMsg ); 425 } 426 } 427 428 /** 429 * 【TAG】フィールド部分の colspan を指定します。 430 * 431 * @og.tag 432 * 通常は、3 を指定して、フィールド、ラベル、フィールドの 433 * 組み合わせ部分に、長いフィールドが適用されるように使用します。 434 * 435 * <og:select name="CDK" colspan="3" /> 436 * 437 * @og.rev 3.0.1.3 (2003/03/11) colspan 属性を追加。 438 * 439 * @param sp フィールド部分の colspan 440 */ 441 public void setColspan( final String sp ) { 442 colspan = nval( getRequestParameter( sp ),colspan ); 443 } 444 445 /** 446 * 【TAG】値を指定します。 447 * 448 * @og.tag 449 * ここで指定された値が、optionタグの値と同じであれば、選択状態になります。 450 * 451 * <og:select name="CDC" value="{@ABC}" defaultVal="XYZ" > 452 * <og:option value="ABC" lbl="CDC1" /> 453 * <og:option value="XYZ" lbl="CDC2" /> 454 * </og:select> 455 * 456 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 457 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 458 * 459 * @param val 値 460 */ 461 public void setValue( final String val ) { 462 value = nval( StringUtil.array2line( getRequestParameterValues( val ), "|" ),value ); 463 } 464 465 /** 466 * 値を外部から取り出します。 467 * 468 * OptionTag で、value を取り出して、内部の値と同じ場合は、選択状態にします。 469 * 470 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 471 * @og.rev 5.7.1.0 (2013/12/06) OptionAncestorIF にする為、protected ⇒ public 化する。 472 * 473 * @return 内部に設定された値 474 */ 475 public String getValue() { 476 return value; 477 } 478 479 /** 480 * 【TAG】イベントカラム(親カラム)を指定します。 481 * 482 * @og.tag 483 * 親子関係のカラムを作成する場合に利用します。 484 * queryOptionタグとセットで利用して下さい。 485 * 486 * ※詳細はcolumnTagのeventColumn属性の説明をご覧下さい。 487 * 488 * @og.rev 4.3.6.0 (2009/04/01) 489 * 490 * @param col 親カラム名 491 */ 492 public void setEventColumn( final String col ) { 493 eventColumn = nval( getRequestParameter( col ), eventColumn ); 494 } 495 496 /** 497 * 【TAG】イベントカラム指定時に呼び出すURL。 498 * 499 * @og.tag 500 * イベントカラム指定時に部品を作成するJSPを指定します。 501 * 初期値はシステムリソースのEVENT_COLUMN_URLです。 502 * (例:eventURL="makeColumn_custom.jsp") 503 * 504 * ※詳細はcolumnTagのeventURL属性の説明をご覧下さい。 505 * 506 * @og.rev 4.3.6.0 (2009/04/01) 507 * 508 * @param url 呼び出すURL 509 */ 510 public void setEventURL( final String url ) { 511 eventURL = nval( getRequestParameter( url ), eventURL ); 512 } 513 514 /** 515 * 複数選択可能時に全選択を設定するかどうかを返します。 516 * 517 * これは、上位入れ子のタグの OptionTag で、multipleAll を取り出して、 518 * true であれば、全選択に設定します。 519 * 520 * @og.rev 3.8.0.9 (2005/10/17) 新規作成 521 * @og.rev 5.7.1.0 (2013/12/06) OptionAncestorIF にする為、protected ⇒ public 化する。 522 * 523 * @return 全選択:true / 通常:false 524 */ 525 public boolean isMultipleAll() { 526 return multipleAll; 527 } 528 529 /** 530 * 【TAG】value属性に値がセットされていないとき使用する、初期値を指定します。 531 * 532 * @og.tag 533 * value属性に値がセットされていないときに、初期値をセットします。 534 * 535 * なお、commandがRENEWの場合は、このdefaultValは適用されません。 536 * これは、defaultValの値が埋め込まれた項目が存在する画面に戻った際に、 537 * defaultValの項目の値がnullとなっていた場合に、defaultValの値が復元されると、 538 * 検索結果との不一致が発生するためです。 539 * 540 * @og.rev 3.5.4.0 (2003/11/25) 新規作成 541 * @og.rev 5.0.2.0 (2009/11/01) 複数パラメーターの選択に対応 542 * 543 * @param dv 初期値 544 */ 545 public void setDefaultVal( final String dv ) { 546 defaultVal = nval( StringUtil.array2line( getRequestParameterValues( dv ), "|" ),defaultVal ); 547 } 548 549 /** 550 * 【TAG】値なしのOptionを含めるかどうか[true/false]を指定します(初期値:false)。 551 * 552 * @og.tag 553 * カラムがプルダウンメニュー形式の場合、選択肢には通常データベース登録できる候補が 554 * 並びます。しかし、検索時には、候補を絞りたくない(指定しない)場合があり、 555 * その様な場合には、値なしのOptionを含める(true)ことで、対応可能です。 556 * 初期値:false(値なしのOptionを含めない)は、過去の互換性を重視しているため、column タグと異なります。 557 * 558 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 559 * 560 * @param flag [true:含める/それ以外:含めない] 561 */ 562 public void setAddNoValue( final String flag ) { 563 addNoValue = nval( getRequestParameter( flag ),addNoValue ); 564 } 565 566 /** 567 * パラメーター変換({@XXXX}の置き換えをしない状態のパラメーターをセットします。 568 * 569 * @og.rev 5.1.7.0 (2010/06/01) 新規作成(動的プルダウン実装見直し) 570 * @og.rev 5.5.4.0 (2012/07/02) 予約語対応 571 * 572 * @param param パラメーター 573 */ 574 public void setRawParam( final String param ) { 575 rawParam = nval( getReservedParameter(param), rawParam ); // 5.5.4.0 (2012/07/02) 576 } 577 578 /** 579 * 【TAG】eventColumn実行後のcallbak関数指定。 580 * 581 * @og.tag 582 * eventColumnの動作終了後に実行するCallback関数の指定を行います。 583 * 関数名のみを指定して下さい。 584 * ex) sampleCallback()を実行する場合はeventCallback="sampleCallback" 585 * 実行する関数の第一引数には自動的に次の要素が入った配列が渡されます 586 * [0] 変更された子カラムのID属性値 587 * [1] evnetColumn実行後の子カラムの値 588 * [2] eventColumn実行前の子カラムの値 589 * 590 * この属性は、optionAttributesへの設定と同様の動作を行います。 591 * 592 * @og.rev 5.5.4.0 (2012/07/02) 新規追加 593 * 594 * @param callback callbak関数 595 */ 596 public void setEventCallback( final String callback ) { 597 // optionAttributes扱いで登録します。 598 if( callback != null && callback.length() > 0 ){ 599 add( "optionAttributes", "eventCallback='"+getRequestParameter( callback )+"'" ); 600 } 601 } 602 603 /** 604 * シリアライズ用のカスタムシリアライズ書き込みメソッド 605 * 606 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 607 * @serialData 一部のオブジェクトは、シリアライズされません。 608 * 609 * @param strm ObjectOutputStreamオブジェクト 610 * @throws IOException 入出力エラーが発生した場合 611 */ 612 private void writeObject( final ObjectOutputStream strm ) throws IOException { 613 strm.defaultWriteObject(); 614 } 615 616 /** 617 * シリアライズ用のカスタムシリアライズ読み込みメソッド 618 * 619 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 620 * 621 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 622 * @serialData 一部のオブジェクトは、シリアライズされません。 623 * 624 * @param strm ObjectInputStreamオブジェクト 625 * @see #release2() 626 * @throws IOException シリアライズに関する入出力エラーが発生した場合 627 * @throws ClassNotFoundException クラスを見つけることができなかった場合 628 */ 629 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 630 strm.defaultReadObject(); 631 option = new Options(); 632 } 633 634 /** 635 * このオブジェクトの文字列表現を返します。 636 * 基本的にデバッグ目的に使用します。 637 * 638 * @return このクラスの文字列表現 639 */ 640 @Override 641 public String toString() { 642 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 643 .println( "VERSION" ,VERSION ) 644 .println( "td_flag" ,td_flag ) 645 .println( "colspan" ,colspan ) 646 .println( "value" ,value ) 647 .println( "defaultVal" ,defaultVal ) 648 .println( "multipleAll" ,multipleAll ) 649 .println( "Other..." ,getAttributes().getAttribute() ) 650 .fixForm().toString() ; 651 } 652}