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 */ 016 package org.opengion.plugin.column; 017 018 import org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.hayabusa.common.HybsSystemException; 020 import org.opengion.hayabusa.db.AbstractEditor; 021 import org.opengion.hayabusa.db.CellEditor; 022 import org.opengion.hayabusa.db.DBColumn; 023 import org.opengion.hayabusa.db.Selection; 024 import org.opengion.hayabusa.db.SelectionFactory; 025 import org.opengion.fukurou.util.StringFormat; 026 import org.opengion.fukurou.util.XHTMLTag; 027 import org.opengion.fukurou.util.TagBuffer; 028 029 /** 030 * カラãƒ??ç·¨é›?ƒ‘ラメーターã®?³?±?¬æ–??å®Ÿè¡Œçµæžœã‚ˆã‚Šã€datalistを作æ?ã—㦠031 * 入力å?補ã¨ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒªã‚¹ãƒˆã‚’定義ã™ã‚‹ç·¨é›?”¨ã‚¨ãƒ?‚£ã‚¿ãƒ¼ã‚¯ãƒ©ã‚¹ã§ã™ã? 032 * datalist ã¯ã€HTML5 ã‹ã‚‰æŽ¡ç”¨ã•れãŸã‚¿ã‚°ã§ã™ã? 033 * 034 * ç·¨é›?ƒ‘ラメータã«ã¯ã€datalistを作æ?ã™ã‚‹ãŸã‚ã®ã€SQLæ–?‚’記述ã—ã¾ã™ã? 035 * ã“ã?SQLæ–??ã€select KEY,LABEL from xx ?¥?¥?¥ ã¨ã?†æ§‹æ–‡ã§ã€KEY部åˆ?¨LABEL部åˆ?Œ 036 * é¸æŠžã•れã¾ã™ã? 037 * datalist 自身ãŒã?HTML5ã‹ã‚‰ã®æ–°æ©Ÿè?ãªã®ã§ã€ç¾æ™‚点ã§ã¯ã€ã“れ以上ã?機è?ã¯ã‚りã¾ã›ã‚“ã€? 038 * å°?¥çš?«ã€DBMENU ãªã©ã¨åŒæ§˜ã«ã€ç¬¬ä¸‰ã‚«ãƒ©ãƒ?»¥é™ã‚’利用å¯èƒ½ã«ãªã‚‹ã¨æ€ã„ã¾ã™ã?ã§ã€? 039 * 今ã?使ã‚ãªã?§ãã ã•ã„。(å°?¥ã®æ©Ÿè?追åŠ?™‚ã«äº’æ›æ€§å•題を引ãèµ·ã“ã™ã‹ã‚‚ã—れã¾ã›ã‚“ã®ã§?? 040 * 041 * 入力フィールドã¨datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã?ã€ã‚«ãƒ©ãƒ?Dã«ã€?カラãƒ?D.sel" ã§çµã?ã¤ã‘ã¾ã™ã? 042 * 043 * <input name="カラãƒ?D" list="カラãƒ?D.sel" /> 044 * <div style="display:none;"> 045 * <datalist id="カラãƒ?D.sel"> 046 * <option value="KEY1">LABEL1</option> 047 * <option value="KEY2">LABEL2</option> 048 * <option value="KEY3">LABEL3</option> 049 * </datalist> 050 * </div> 051 * 052 * divã‚¿ã‚°ã¯ã€HTML5 éžå¯¾å¿œãƒ–ラウザを使用ã—ãŸå ´åˆã?datalist ã® option ãŒãã®ã¾ã¾ 053 * ãƒ?‚ストã¨ã—ã¦è¦‹ãˆã¦ã—ã¾ã??ã‚’é¿ã‘ã‚‹ãŸã‚ã§ã™ã? 054 * 055 * ä¸?¦§è¡¨å‡ºåŠ›æ™‚ã® getValue( int ,String ) 処ç?§ã¯ã€Selection オブジェクトã? 056 * ã‚ャãƒ?‚·ãƒ¥æ©Ÿè?を利用ã—ã¦ã€åŒä¸?election オブジェクトã?é–“ã?ã€datalist ã¯ã€? 057 * ?‘度ã—ã‹ã€å?力ã—ãªã?§˜ã«åˆ¶å¾¡ã—ã¦ã?¾ã™ã?ã“れã«ã‚ˆã‚Šã€å?有ã?datalist を使用ã™ã‚‹ç‚ºã€? 058 * HTMLã®å‡ºåŠ›ãƒ‡ãƒ¼ã‚¿é‡ã‚’抑ãˆã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã? 059 * (ã‚ャãƒ?‚·ãƒ¥ã‚’利用ã—ãªã?¨?‘ï¼ï¼è¡Œå?力ã™ã‚‹ã¨?‘ï¼ï¼å?ã®datalistã‚’å?力ã™ã‚‹äº‹ã«ãªã‚Šã¾ã™ã?) 060 * (åŒæ§˜ã?機è?ã‚’æŒã¤ INDBMENU ã§ã¯ã€è¡Œã”ã¨ã«ãƒ—ルãƒ?‚¦ãƒ³ãƒ??タを作æ?ã—ã¦ã?¾ã™ã?) 061 * ãŸã ã—ã?行å˜ä½ã«SQLã®æ¡ä»¶ã‚’変ãˆã‚‹æ©Ÿè?(AAA:BBB:CCC:DDD引数)ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€? 062 * 行ã”ã¨ã«å‡ºåŠ›ã—ã¾ã™ã? 063 * 064 * å?‚«ãƒ©ãƒ??値(value値)ã«ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’è¨å®šã§ãã¾ã™ã?ã“れã¯ã€? 065 * $1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€? 066 * メニューã®åˆæœŸå€¤è¨å®šç‰ã«ä½¿ç”¨ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€? 067 * 引数ã«ãªã‚Šã¾ã™ã? 068 * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã? 069 * ã“ã?機è?を使用ã™ã‚Œã°ã€å‹•çš?ƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’行ã”ã¨ã«æ¡ä»¶ã‚’変ãˆã¦ä½œæ?ã™ã‚‹ã“ã¨ã? 070 * å¯èƒ½ã«ãªã‚Šã¾ã™ã? 071 * 例:select KEY,LABEL from xx where KUBUN='$2' and CDK='$3' 072 * ã•らã«ã€å?ã®æ–?—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã? 073 * 変数ã¯ã€?"(ã‚¼ãƒæ–?—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã? 074 * 075 * カラãƒ??表示ã«å¿?¦ãªå±žæ?ã¯, DBColumn オブジェクãƒ?よりå–り出ã—ã¾ã™ã? 076 * ã“ã?クラスã¯ã€DBColumn オブジェクト毎ã«?‘ã¤ä½œæ?ã•れã¾ã™ã? 077 * 078 * @og.rev 5.7.4.3 (2014/03/28) æ–°è¦ä½œæ? 079 * @og.group ãƒ??ã‚¿ç·¨é›?HTML5) 080 * 081 * @version 4.0 082 * @author Kazuhiko Hasegawa 083 * @since JDK5.0, 084 */ 085 public class Editor_DATALIST extends AbstractEditor { 086 //* ã“ã?プãƒã‚°ãƒ©ãƒ??VERSIONæ–?—å?ã‚’è¨å®šã—ã¾ã™ã? {@value} */ 087 private static final String VERSION = "5.7.6.2 (2014/05/16)" ; 088 089 // 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã? 090 private static final String DIV1 = "<div style=\"display:none;\">" ; 091 private static final String DIV2 = "</div>" ; 092 093 private final String query ; 094 private final String dbid ; 095 private final String lang ; 096 097 private Selection bkSel= null; // 5.7.5.0 (2014/04/04) Selection オブジェクトã?ã‚ャãƒ?‚·ãƒ¥æ©Ÿè? 098 099 /** 100 * ãƒ?ƒ•ォルトコンストラクターã€? 101 * ã“ã?コンストラクターã§ã€åŸºæœ¬ã‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã? 102 * 103 */ 104 public Editor_DATALIST() { 105 // super(); 106 query = null; 107 dbid = null; 108 lang = null; 109 } 110 111 /** 112 * コンストラクターã€? 113 * 114 * @param clm DBColumnオブジェクãƒ? 115 */ 116 private Editor_DATALIST( final DBColumn clm ) { 117 super( clm ); 118 tagBuffer.add( XHTMLTag.inputAttri( attributes ) ); 119 120 query = clm.getEditorParam(); 121 dbid = clm.getDbid(); 122 lang = clm.getLang(); // 4.0.0 (2006/11/15) 123 124 // 3.5.5.9 (2004/06/07) 125 if( query == null || query.length() == 0 ) { 126 String errMsg = "DATALIST Editor ã§ã¯ã€ç·¨é›?ƒ‘ラメータã¯å¿??ã§ã™ã?" 127 + " name=[" + name + "]" + HybsSystem.CR ; 128 throw new HybsSystemException( errMsg ); 129 } 130 } 131 132 /** 133 * å?‚ªãƒ–ジェクトã‹ã‚‰è?åˆ??インスタンスを返ã—ã¾ã™ã? 134 * 自åˆ??身をã‚ャãƒ?‚·ãƒ¥ã™ã‚‹ã®ã‹ã?æ–°ãŸã«ä½œæ?ã™ã‚‹ã®ã‹ã?ã€å„サブクラスã®å®Ÿè£?« 135 * ã¾ã‹ã•れã¾ã™ã? 136 * 137 * @param clm DBColumnオブジェクãƒ? 138 * 139 * @return CellEditorオブジェクãƒ? 140 */ 141 public CellEditor newInstance( final DBColumn clm ) { 142 return new Editor_DATALIST( clm ); 143 } 144 145 /** 146 * ãƒ??ã‚¿ã®ç·¨é›?”¨æ–?—å?ã‚’è¿”ã—ã¾ã™ã? 147 * 148 * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€? 149 * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨å®šç‰ã« 150 * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã? 151 * ã•らã«ã€å?ã®æ–?—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã? 152 * 変数ã¯ã€?"(ã‚¼ãƒæ–?—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã? 153 * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã? 154 * 155 * @og.rev 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã? 156 * @og.rev 5.7.6.2 (2014/05/16) list属æ?ã¨id属æ?ã®çµã?ã¤ãã‚’ã€name+".sel" ã«å¤‰æ›´ 157 * 158 * @param value 入力å? 159 * 160 * @return ãƒ??ã‚¿ã®ç·¨é›?”¨æ–?—å? 161 */ 162 @Override 163 public String getValue( final String value ) { 164 // input ã‚¿ã‚°ã®ä½œæ? 165 TagBuffer intag = new TagBuffer( "input" ); 166 intag.add( "name" , name ); 167 if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) { 168 intag.add( "id" , name ); 169 } 170 // intag.add( "list" , "dl_" + name ); // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 171 intag.add( "list" , name + ".sel" ); // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 172 intag.add( "value" , value ); 173 intag.add( "size" , size1 ); 174 intag.add( tagBuffer.makeTag() ); 175 intag.add( optAttr ); 176 177 // datalist ã‚¿ã‚°ã®ä½œæ? 178 TagBuffer dltag = new TagBuffer( "datalist" ); 179 // dltag.add( "id" , "dl_" + name ); // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 180 dltag.add( "id" , name + ".sel" ); // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 181 182 dltag = getOption( dltag,value,false ); // ã‚ャãƒ?‚·ãƒ¥ã¯ä½¿ç”¨ã—ãªã?? 183 184 // display:none ã¯ã€datalist ã® optionã®BODY部ãŒã?HTML5 以外ã§ã¯è¡¨ç¤ºã•れã¦ã—ã¾ã??を防ããŸã‚ã? 185 return intag.makeTag() + HybsSystem.CR + 186 DIV1 + dltag.makeTag() + DIV2 + HybsSystem.CR; 187 } 188 189 /** 190 * name属æ?を変ãˆãŸã?ãƒ??タ表示/ç·¨é›?”¨ã®HTMLæ–?—å?を作æ?ã—ã¾ã™ã? 191 * ãƒ??ブル上ã? name 㫠行番å·ã‚’ä»˜åŠ ã—ã¦ã€åå‰_è¡Œç•ªå· ã§ç™»éŒ²ã™ã‚‹ã‚ーを作æ?ã? 192 * ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã‚’ï¼‘ã¤æ¯Žã?フィールドã§å‡¦ç?§ãã¾ã™ã? 193 * 194 * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€? 195 * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨å®šç‰ã« 196 * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã? 197 * ã•らã«ã€å?ã®æ–?—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã? 198 * 変数ã¯ã€?"(ã‚¼ãƒæ–?—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã? 199 * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã? 200 * 201 * @og.rev 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã? 202 * @og.rev 5.7.5.0 (2014/04/04) Selection オブジェクトã?ã‚ャãƒ?‚·ãƒ¥æ©Ÿè? 203 * @og.rev 5.7.6.2 (2014/05/16) list属æ?ã¨id属æ?ã®çµã?ã¤ãã‚’ã€name+".sel" ã«å¤‰æ›´ 204 * 205 * @param row è¡Œç•ªå· 206 * @param value 入力å? 207 * 208 * @return ãƒ??タ表示/ç·¨é›?”¨ã®æ–?—å? 209 */ 210 @Override 211 public String getValue( final int row,final String value ) { 212 String name2 = name + HybsSystem.JOINT_STRING + row ; 213 214 // 5.7.5.0 (2014/04/04) Selection オブジェクトã?ã‚ャãƒ?‚·ãƒ¥æ©Ÿè? (true:使用å¯èƒ½) 215 boolean useSelCache = value != null && value.indexOf( ':' ) < 0 ; 216 217 String listId = useSelCache ? name : name2; // ã‚ャãƒ?‚·ãƒ¥ã‚’使用ã™ã‚‹å ´åˆã?ã€å?通ã? name を使ã?? 218 219 // input ã‚¿ã‚°ã®ä½œæ? 220 TagBuffer intag = new TagBuffer( "input" ); 221 intag.add( "name" , name2 ); 222 if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) { 223 intag.add( "id" , name2 ); 224 } 225 // intag.add( "list" , "dl_" + listId ); // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 226 intag.add( "list" , listId + ".sel" ); // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 227 intag.add( "value" , value ); 228 intag.add( "size" , size2 ); 229 intag.add( tagBuffer.makeTag() ); 230 intag.add( optAttr ); 231 232 // datalist ã‚¿ã‚°ã®ä½œæ? 233 TagBuffer dltag = new TagBuffer( "datalist" ); 234 // dltag.add( "id" , "dl_" + listId ); // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 235 dltag.add( "id" , listId + ".sel" ); // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?ã‚ーワーãƒ? 236 237 dltag = getOption( dltag,value,useSelCache ); 238 239 // ã‚ャãƒ?‚·ãƒ¥ãŒåйãã¨ã€getOption ã®æˆ»ã‚Šå?ã¯ã€null ã«ãªã‚‹ã? 240 if( dltag != null ) { 241 return intag.makeTag( row,value ) + HybsSystem.CR + 242 DIV1 + dltag.makeTag( row,value ) + DIV2 + HybsSystem.CR ; 243 } 244 else { 245 return intag.makeTag( row,value ) + HybsSystem.CR ; 246 } 247 } 248 249 /** 250 * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’TagBuffer ã«åæ˜ ã—ã¾ã™ã? 251 * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグ作æ?ã—ã?TagBuffer 252 * ã«å€¤ã‚’è¨å®šã—ã¦è¿”ã—ã¾ã™ã? 253 * 254 * 第?“引数ã¯ã€Selection オブジェクトã?ã‚ャãƒ?‚·ãƒ¥æ©Ÿè?を使用ã™ã‚‹ã‹ã©ã?‹æŒ?®šã—ã¾ã™ã? 255 * true ã§ã€ä½¿ç”¨ã™ã‚‹äº‹ã‚’剿ã«ã€ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã? 256 * DBMENU ãªã©ã€ä»–ã?メソãƒ?ƒ‰ã§ã¯ã€ãƒ©ãƒ™ãƒ«(çŸ)ã®ä½¿ç”¨æœ‰ç„¡ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã?‚‹ãŸã‚ã€ç•°ãªã‚Šã¾ã™ã? 257 * 258 * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€? 259 * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨å®šç‰ã« 260 * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã? 261 * ã•らã«ã€å?ã®æ–?—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã? 262 * 変数ã¯ã€?"(ã‚¼ãƒæ–?—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã? 263 * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã? 264 * 265 * @param buf ã‚¿ã‚°æ–?—å?ã®ãƒãƒƒãƒ•ァー 266 * @param value é¸æŠžã•れã¦ã?‚‹å€¤ 267 * @param useSelCache Selection オブジェクトã?ã‚ャãƒ?‚·ãƒ¥æ©Ÿè?を使用ã™ã‚‹ã‹ã©ã?‹ã€? 268 * 269 * @return オプションタグ 270 */ 271 private TagBuffer getOption( final TagBuffer buf,final String value,final boolean useSelCache ) { 272 273 StringFormat format = new StringFormat( query, value, name ); 274 String newQuery = format.format(); 275 String newValue = format.getValue(); 276 277 Selection selection = SelectionFactory.newDBSelection( newQuery, dbid, lang ); 278 279 if( useSelCache ) { 280 if( selection == bkSel ) { return null; } 281 bkSel = selection ; 282 } 283 284 buf.setBody( selection.getOption( newValue, false ) ); 285 286 return buf; 287 } 288 }