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.hayabusa.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020
021 import static org.opengion.fukurou.util.StringUtil.nval ;
022
023 import org.opengion.fukurou.util.TagBuffer;
024 import org.opengion.fukurou.util.XHTMLTag;
025
026 /**
027 * TagSupport から継承されたサブクラスですã?
028 *
029 * 汎用属æ? のsetterメソãƒ?ƒ‰を持ってã�?�¾すã?
030 * それ以外に、{@XXXX} 変数の対応と、lang属æ?のメソãƒ?ƒ‰も用意してã�?�¾すã?
031 *
032 * ロケールは、ユーザーæƒ??の lang 属æ?をデフォルトで使用しã?
033 * セãƒ?ƒˆされてã�?�ªã�??合ã?、リクエスト情報のロケールから取得しますã?
034 *
035 * å�?±žæ?は、{@XXXX} 変数が使用できますã?
036 * これは、ServletRequest から、XXXX をキーに値を取りå?ã�?こã?変数に
037 * 割り当てますã?つまりã?こã?XXXXをキーにリクエストすれã?ã€?
038 * こã?変数に値をセãƒ?ƒˆすることができますã?
039 *
040 * http://localhost/query.jsp?KEY1=VLA1&KEY2=VAL2
041 *
042 * のようなリクエストで、{@KEY1} とすればã€?VAL1 がセãƒ?ƒˆされますã?
043 *
044 * こã?タグは、ラベル部åˆ?�¨入力フィールド部åˆ?�Œãƒ??ブルタグの<td>
045 * により左右にåˆ?‰²されますã?HTML 表示時ã?、前後に<tr>タグで囲って,
046 * 整形できますã?
047 *
048 * ※ readonly , disabled , autofocus[HTML5] , required[HTML5] は、論理属æ?ですã?
049 * 通常は、キーワードã?みのæŒ?®šで、有効ですã?
050 * よって、readonly="false" としてもã?readonly とã�?�†キーワードが存在すると、有効になりますã?
051 * 記述ä¾? â‘?eadonly ②readonly="" ③readonly="readonly" の?“種類が推奨されますã?
052 * 「属æ?名ã? 「属æ?å�?""ã€?「属æ?å�?"属æ?å�?ã€?
053 * フレーãƒ?ƒ¯ーク側の問題として、①ã‚?‘¡の渡し方は他ã?属æ?との関係や、動çš?�ªリクエスト変数の処ç�??
054 * 関係で、③を利用しますã?またã?動的åˆ?›¿の為に、④readonly="[true/false]" も受け付けますã?
055 * å†?ƒ¨çš?�«は、readonly="true" の場合ã?、readonly="readonly" を作æ?しã?readonly="false" の場合ã?ã€?
056 * なにも作æ?しなã�?�¨ã�?�†処ç�?‚’行ってã�?�¾すã?
057 *
058 * @og.group 画面部å“?
059 *
060 * @version 4.0
061 * @author Kazuhiko Hasegawa
062 * @since JDK5.0,
063 */
064 abstract class HTMLTagSupport extends CommonTagSupport {
065 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
066 private static final String VERSION = "5.7.2.0 (2014/01/10)" ;
067
068 private static final long serialVersionUID = 572020140110L ;
069
070 // 5.8.4.1 (2014/02/20) AimaiPicker のタイプに対応したキーワーãƒ?
071 private static final String[] AIMAI_TEXT = new String[] { " V ", " V*", "*V ", "*V*" };
072 private static final String[] AIMAI_TITL = new String[] { "完å?ä¸??", "前方ä¸??", "後方ä¸??", "前後曖昧" };
073
074 // 5.2.1.0 (2010/10/01) must , mustAny 属æ?をè?動化しますã?
075 private String mustType = null; // 5.2.1.0 (2010/10/01)
076 // 5.7.2.0 (2014/01/10) 自動化の制御をできるようにしますã?(初期は自å‹?
077 private boolean useMustHidden = true; // 5.7.2.0 (2014/01/10)
078
079 // 5.8.4.1 (2014/02/20) aimai 属æ?を追åŠ??
080 private int aimai = -1; // 6.2.0.0 (2015/01/30)
081
082 /**
083 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
084 *
085 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
086 * @og.rev 4.0.0.0 (2005/11/30) ロール をè?慮しますã?
087 * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
088 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
089 *
090 * @return 後続å?ç�?
091 */
092 @Override
093 public int doEndTag() {
094 debugPrint(); // 4.0.0 (2005/02/28)
095 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
096 if( useTag() && getUser().isAccess( get( "roles" ) ) ) { // 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
097 jspPrint( makeTag() );
098 }
099 return EVAL_PAGE ;
100 }
101
102 /**
103 * タグリブオブジェクトをリリースしますã?
104 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
105 *
106 * @og.rev 5.2.1.0 (2010/10/01) mustType 属æ?を追åŠ??
107 * @og.rev 5.7.2.0 (2014/01/10) useMustHidden追åŠ?
108 * @og.rev 5.8.4.1 (2015/02/20) aimai追åŠ?
109 */
110 @Override
111 protected void release2() {
112 super.release2();
113 mustType = null; // 5.2.1.0 (2010/10/01)
114 useMustHidden = true; // 5.7.2.0 (2013/12/10)
115 aimai = -1; // 5.8.4.1 (2015/02/20)
116 }
117
118 /**
119 * ボタンを作æ?しますã?
120 *
121 * <button type="submit" name="名前" value="値">
122 *
123 * @return ボタンタグæ–?—å?
124 */
125 abstract protected String makeTag() ;
126
127 /**
128 * 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しますã?
129 *
130 * @og.tag
131 * 特別な使用方法として、id="FOCUS" とすることで、フィールド系要ç´?�«
132 * フォーカスを移動させますã?これは、そのペã?ジå†?�§唯ä¸?? id 属æ?として使用くださいã€?
133 *
134 * ※ HTML5 より、autofocus属æ?の使用が可能になりましたã€?
135 *
136 * @param id 固有ã?名前
137 */
138 @Override
139 public void setId( final String id ) {
140 set( "id",getRequestParameter( id ) );
141 }
142
143 /**
144 * 【HTML】要ç´?�«対して class 属æ?を設定しますã?
145 *
146 * @og.tag
147 * Javaのè¨?ªž使用上ã?class で作æ?できなã�?�Ÿめã?代用として
148 * clazz を使用してã�?�¾すã?
149 * html で作æ?される属æ?はã€?class で作æ?されますã?
150 *
151 * @og.rev 3.5.0.0 (2003/09/17) set ではなくã?add を利用しますã?
152 *
153 * @param cls classを表す文字å?
154 */
155 public void setClazz( final String cls ) {
156 add( "class",getRequestParameter( cls ) ); // 3.5.5.9 (2004/06/07) セパレータ引数付きのメソãƒ?ƒ‰に変更
157 }
158
159 /**
160 * 【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しますã?
161 *
162 * @og.tag
163 * HTMLのè¨?ªž属æ?に使われますã?æŒ?®šするå?は、ISO 639で規定されてã�?‚‹「è¨?ªžコードã?ですã?
164 * [ja/en/zh/…]などのほかに、en-US:アメリカ英語ã?en-cockney:コãƒ?‚¯ニã?英èª?などã€?
165 * 副è¨?ªžをæŒ?®šする方法も定められてã�?�¾すã?
166 * ここでは、lang と xml:lang の両方に同じ値がセãƒ?ƒˆされますã?
167 * タグの language 属æ?とは使用用途が異なりますã?
168 *
169 * @og.tag lang セãƒ?ƒˆ
170 *
171 * @param lang è¨?ªž[ja/en/zh/…]
172 */
173 public void setLang( final String lang ) {
174 String lng = getRequestParameter( lang );
175 if( lng != null ) {
176 set( "lang",lng );
177 set( "xml:lang",lng );
178 }
179 }
180
181 /**
182 * 【HTML】文字表記ã?方å�?dir)を指定しますã?
183 *
184 * @og.tag
185 * 当該要ç´??書字方向をæŒ?®šする属æ?ですã?
186 * ltr で、左から右に、rtl で、右から左に並べますã?
187 *
188 * @param dir (ltr:左から右、rtl:右から左 )
189 */
190 public void setDir( final String dir ) {
191 set( "dir",getRequestParameter( dir ) );
192 }
193
194 /**
195 * 【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しますã?
196 *
197 * @og.tag
198 * title セãƒ?ƒˆは、ã?タンなどに適用すると、ã?ウスオーバã?によりこã?メãƒ?‚»ージã�?
199 * チップスのように表示されますã?これを利用して、説明文を登録することが可能ですã?
200 * ここに登録したæ–?—å?がã?メãƒ?‚»ージリソースに存在する場合ã?、そのメãƒ?‚»ージã‚?
201 * 存在しなã�??合ã?、そのままの値を設定しますã?
202 *
203 * @og.rev 3.5.5.8 (2004/05/20) メãƒ?‚»ージリソースから読み込んだæ–?—を使用しますã?
204 * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
205 *
206 * @param title 補足çš?ƒ…報(title)
207 */
208 public void setTitle( final String title ) {
209 String str = nval( getRequestParameter( title ),null );
210 if( str != null ) {
211 set( "title",getResource().getLabel( str ) );
212 }
213 }
214
215 /**
216 * 【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しますã?
217 *
218 * @og.tag
219 * タグにstyle属æ?を設定しますã?これは、キー:値; のセãƒ?ƒˆをè¤?•°記述できますã?
220 * 通常は、class属æ?ã‚??id属æ?で登録しておきã€?lt;style type="text/css"> で
221 * 外部からæŒ?®šする方がソースは読みã‚?�™くなりますã?
222 *
223 * @param style スタイルシーãƒ?style="color:red; font-size:24pt;" など)
224 */
225 public void setStyle( final String style ) {
226 set( "style",getRequestParameter( style ) );
227 }
228
229 /**
230 * 【TAG】その部品に対して変更がå?来なã�?‚ˆã�?�«(readonly)æŒ?®šしまã�?サーバã?に送信されã‚?ã€?
231 *
232 * @og.tag
233 * INPUT/TEXTAREA 系に対して、指定可能ですã?
234 * readonly="readonly" , readonly="true" が指定された場合ã?、有効ですã?
235 * false も指定å?としては、有効ですã?(大æ–?—小文字ã?区別も不è¦?
236 * それ以外ã?æŒ?®šã?、エラーとしますã?
237 *
238 * ※ readonly は、論理属æ?ですã?
239 *
240 * @og.rev 3.7.1.0 (2005/04/26) readonly,true,false が指定できるように変更ã€?
241 *
242 * @param ronly 読み取り専用属æ?[readonly/true/false]
243 */
244 public void setReadonly( final String ronly ) {
245 String readonly = nval( getRequestParameter( ronly ),null );
246 if( readonly != null ) {
247 if( "readonly".equalsIgnoreCase( readonly ) ||
248 "true".equalsIgnoreCase( readonly ) ) {
249 set( "readonly","readonly" );
250 }
251 else if( ! "false".equalsIgnoreCase( readonly ) ) {
252 String errMsg = "readonly には、[readonly,true,false]以外ã?æ–?—ã?æŒ?®šできませんã€?
253 + " readonly=[" + readonly + "]" + HybsSystem.CR ;
254 throw new HybsSystemException( errMsg );
255 }
256 }
257 }
258
259 /**
260 * 【TAG】その部品に対してã€?�¸択や変更がå?来なã�?‚ˆã�?�«(disabled)æŒ?®šしまã�?サーバã?に送信されなã�?ã€?
261 *
262 * @og.tag
263 * BUTTON/INPUT/OPTGROUP/OPTION/SELECT/TEXTAREA 系に対して、指定可能ですã?
264 * disabled="disabled" , disabled="true" が指定された場合ã?、有効ですã?
265 * false も指定å?としては、有効ですã?(大æ–?—小文字ã?区別も不è¦?
266 * それ以外ã?æŒ?®šã?、エラーとしますã?
267 *
268 * ※ disabled は、論理属æ?ですã?
269 *
270 * @og.rev 3.7.1.0 (2005/04/26) disabled,true,false が指定できるように変更ã€?
271 *
272 * @param dis 選択や変更がå?来なã�?‚ˆã�?�«するかどã�?�‹[disabled/true/false]
273 */
274 public void setDisabled( final String dis ) {
275 String disabled = nval( getRequestParameter( dis ),null );
276 if( disabled != null ) {
277 if( "disabled".equalsIgnoreCase( disabled ) ||
278 "true".equalsIgnoreCase( disabled ) ) {
279 set( "disabled","disabled" );
280 }
281 else if( ! "false".equalsIgnoreCase( disabled ) ) {
282 String errMsg = "disabled には、[disabled/true/false]以外ã?æ–?—ã?æŒ?®šできませんã€?
283 + " disabled=[" + disabled + "]" + HybsSystem.CR ;
284 throw new HybsSystemException( errMsg );
285 }
286 }
287 }
288
289 /**
290 * 【HTML】タブã?移動é?(tabindex)を指定しまã�?0 ??32767)ã€?
291 *
292 * @og.tag
293 * Tabキーを押したときに要ç´?�Œ選択されるé ?•ªを指定しますã?
294 * 値にはã€?�¸択させたã�??番を数値で記述しますã?
295 *
296 * @param tabindex タブã?移動é?(0 ??32767)
297 */
298 public void setTabindex( final String tabindex ) {
299 set( "tabindex",getRequestParameter( tabindex ) );
300 }
301
302 /**
303 * 【HTML】アクセスキー(alt+キーで直接æŒ?®?を割り当てますã?
304 *
305 * @og.tag
306 * アクセスキーは、ã?ウスの使えなã�?’°å¢?�§もã?リンクにジャンプするã?ボタンを押すã?入力フォーãƒ?�«
307 * フォーカスを移すなどの操作を簡単に行うことができるようにè€??されたものですã?
308 * Windows の「ファイル(F)」メニューにつã�?�¦ã�?‚‹、F と同じような働きをしますã?
309 *
310 * @param accesskey アクセスキー
311 */
312 public void setAccesskey( final String accesskey ) {
313 set( "accesskey",getRequestParameter( accesskey ) );
314 }
315
316 /**
317 * 【TAG】JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?ままタグとして使用しますã?
318 *
319 * @og.tag
320 * JavaScript などの HTML基本タグ以外ã?属æ?をã?そã?まま
321 * タグとして使用しますã?
322 *
323 * @og.rev 3.1.0.1 (2003/03/26) (')ã‚?")に置き換えå?ç�?�—てã�?�Ÿのを止めるã€?
324 *
325 * @param optionAttributes HTML基本タグ以外ã?属æ?
326 */
327 public void setOptionAttributes( final String optionAttributes ) {
328 String optAttri = getRequestParameter( optionAttributes );
329 if( optAttri != null && optAttri.length() > 0 ) {
330 set( "optionAttributes",optAttri );
331 }
332 }
333
334 /**
335 * 【HTML】JavaScriptのイベンãƒ?onClick を設定しまã�?ä¾?onClick="renew('query.jsp','QUERY');")ã€?
336 *
337 * @og.tag
338 * onClick をセãƒ?ƒˆしますã?
339 * 例えばã€?lt;og:column name="KBSAKU" onClick="renew('query.jsp','QUERY');" />
340 * のようにæŒ?®šすることで、ã?ルãƒ?‚¦ンメニューの絞込み検索が可能になりますã?
341 *
342 * @og.rev 3.5.0.0 (2003/09/17) 新規追åŠ?
343 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追åŠ?ƒ¡ソãƒ?ƒ‰に変更
344 *
345 * @param onClick onClickイベンãƒ?ä¾?onClick="renew('query.jsp','QUERY');")
346 */
347 public void setOnClick( final String onClick ) {
348 add( "onClick",getRequestParameter( onClick ),";" );
349 }
350
351 /**
352 * 【HTML】JavaScriptのイベンãƒ?onChange を設定しまã�?ä¾?onChange="renew('query.jsp','QUERY');")ã€?
353 *
354 * @og.tag
355 * onChange をセãƒ?ƒˆしますã?
356 * 例えばã€?lt;og:column name="KBSAKU" onChange="renew('query.jsp','QUERY');" />
357 * のようにæŒ?®šすることで、ã?ルãƒ?‚¦ンメニューの絞込み検索が可能になりますã?
358 *
359 * @og.rev 3.5.0.0 (2003/09/17) 新規追åŠ?
360 * @og.rev 3.5.5.9 (2004/06/07) セパレータ付きの追åŠ?ƒ¡ソãƒ?ƒ‰に変更
361 *
362 * @param onChange onChangeイベンãƒ?ä¾?onChange="renew('query.jsp','QUERY');")
363 */
364 public void setOnChange( final String onChange ) {
365 add( "onChange",getRequestParameter( onChange ),";" );
366 }
367
368 /**
369 * 【HTML】JavaScriptのイベンãƒ?onBlur を設定しまã�?ä¾?onBlur="this.value=value.toUpperCase();")ã€?
370 *
371 * @og.tag
372 * onBlur は、フォーカスが離れたときに発生するイベントですã?
373 *
374 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
375 *
376 * @param onBlur onBlurイベンãƒ?ä¾?onBlur="this.value=value.toUpperCase();")
377 */
378 public void setOnBlur( final String onBlur ) {
379 add( "onBlur",getRequestParameter( onBlur ),";" );
380 }
381
382 /**
383 * 【HTML】JavaScriptのイベンãƒ?onFocus を設定しますã?
384 *
385 * @og.tag
386 * onFocus は、フォーカスされたときに発生するイベントですã?
387 *
388 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
389 *
390 * @param onFocus onFocusイベンãƒ?
391 */
392 public void setOnFocus( final String onFocus ) {
393 add( "onFocus",getRequestParameter( onFocus ),";" );
394 }
395
396 /**
397 * 【HTML】JavaScriptのイベンãƒ?onSelect を設定しますã?
398 *
399 * @og.tag
400 * onSelect は、テキストフィールãƒ?ãƒ?‚ストエリアのãƒ?‚ストが
401 * 選択されたときに発生するイベントですã?
402 *
403 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
404 *
405 * @param onSelect onSelectイベンãƒ?
406 */
407 public void setOnSelect( final String onSelect ) {
408 add( "onSelect",getRequestParameter( onSelect ),";" );
409 }
410
411 /**
412 * 【HTML】JavaScriptのイベンãƒ?ondblClick を設定しますã?
413 *
414 * @og.tag
415 * ondblClick は、ã?ウスでãƒ?ƒ–ルクリãƒ?‚¯されたときに発生するイベントですã?
416 *
417 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
418 *
419 * @param ondblClick ondblClickイベンãƒ?
420 */
421 public void setOndblClick( final String ondblClick ) {
422 add( "ondblClick",getRequestParameter( ondblClick ),";" );
423 }
424
425 /**
426 * 【HTML】JavaScriptのイベンãƒ?onMouseDown を設定しますã?
427 *
428 * @og.tag
429 * onMouseDown は、ã?ウスãƒ?‚¦ンされたときに発生するイベントですã?
430 *
431 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
432 *
433 * @param onMouseDown onMouseDownイベンãƒ?
434 */
435 public void setOnMouseDown( final String onMouseDown ) {
436 add( "onMouseDown",getRequestParameter( onMouseDown ),";" );
437 }
438
439 /**
440 * 【HTML】JavaScriptのイベンãƒ?onMouseUp を設定しますã?
441 *
442 * @og.tag
443 * onMouseUp は、ã?ウスアãƒ??されたときに発生するイベントですã?
444 *
445 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
446 *
447 * @param onMouseUp onMouseUpイベンãƒ?
448 */
449 public void setOnMouseUp( final String onMouseUp ) {
450 add( "onMouseUp",getRequestParameter( onMouseUp ),";" );
451 }
452
453 /**
454 * 【HTML】JavaScriptのイベンãƒ?onMouseMove を設定しますã?
455 *
456 * @og.tag
457 * onMouseMove は、ã?ウスが移動されたときに発生するイベントですã?
458 *
459 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
460 *
461 * @param onMouseMove onMouseMoveイベンãƒ?
462 */
463 public void setOnMouseMove( final String onMouseMove ) {
464 add( "onMouseMove",getRequestParameter( onMouseMove ),";" );
465 }
466
467 /**
468 * 【HTML】JavaScriptのイベンãƒ?onMouseOut を設定しますã?
469 *
470 * @og.tag
471 * onMouseOut は、ã?ウスが離れたときに発生するイベントですã?
472 *
473 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
474 *
475 * @param onMouseOut onMouseOutイベンãƒ?
476 */
477 public void setOnMouseOut( final String onMouseOut ) {
478 add( "onMouseOut",getRequestParameter( onMouseOut ),";" );
479 }
480
481 /**
482 * 【HTML】JavaScriptのイベンãƒ?onMouseOver を設定しますã?
483 *
484 * @og.tag
485 * onMouseOver は、ã?ウスが重なったときに発生するイベントですã?
486 *
487 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
488 *
489 * @param onMouseOver onMouseOverイベンãƒ?
490 */
491 public void setOnMouseOver( final String onMouseOver ) {
492 add( "onMouseOver",getRequestParameter( onMouseOver ),";" );
493 }
494
495 /**
496 * 【HTML】JavaScriptのイベンãƒ?onKeydown を設定しますã?
497 *
498 * @og.tag
499 * onKeydown は、キーが押されたときに発生するイベントですã?
500 *
501 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
502 *
503 * @param onKeydown onKeydownイベンãƒ?
504 */
505 public void setOnKeydown( final String onKeydown ) {
506 add( "onKeydown",getRequestParameter( onKeydown ),";" );
507 }
508
509 /**
510 * 【HTML】JavaScriptのイベンãƒ?onKeypress を設定しますã?
511 *
512 * @og.tag
513 * onKeypress は、キーが押され続けてã�?�Ÿときに発生するイベントですã?
514 *
515 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
516 *
517 * @param onKeypress onKeypressイベンãƒ?
518 */
519 public void setOnKeypress( final String onKeypress ) {
520 add( "onKeypress",getRequestParameter( onKeypress ),";" );
521 }
522
523 /**
524 * 【HTML】JavaScriptのイベンãƒ?onKeyup を設定しますã?
525 *
526 * @og.tag
527 * onKeyup は、キーが押された状態から離されたときに発生するイベントですã?
528 *
529 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
530 *
531 * @param onKeyup onKeyupイベンãƒ?
532 */
533 public void setOnKeyup( final String onKeyup ) {
534 add( "onKeyup",getRequestParameter( onKeyup ),";" );
535 }
536
537 /**
538 * 【HTML5】å?力å?補を提示して入力å?容をè?動補完する[on/off]?ˆå?期å?はon?‰ã?
539 *
540 * @og.tag
541 * HTML5から追åŠ?�•れた新機è?ですã?
542 * オートコンプリートを有効にする場合ã?、on 、無効にする場合ã?、off を設定しますã?
543 * 初期値は、on(有効) ですã?
544 *
545 * <datalist> タグを使用して、å?力å?補となるデータリストを定義できますã?
546 * å�?ƒ‡ータのリストé?目はã€?lt;option>で定義しますã? <datalist>をサポã?トしたブラウザではã€?
547 * <option>でæŒ?®šされた値がユーザーに対して入力å?補として提案表示されますã?
548 * <input>のlist属æ?の値と<datalist>のid属æ?の値を同じにして、å?力æ¬?�¨
549 * ãƒ??タリストを関連付けますã?
550 *
551 * 利用可能type:[text,search,url,tel,email,password,datetime,date,month,week,time,datetime-local,number,range,color]
552 *
553 * <pre>
554 * <og:input type="text" name="yourarea" autocomplete="on" list="tokyo" />
555 *
556 * <og:datalist id="tokyo" >
557 * <og:option value="渋谷" />
558 * <og:option value="新宿" />
559 * <og:option value="æ±?¢? />
560 * </og:datalist><
561 * </pre>
562 *
563 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
564 *
565 * @param autocomplete 入力å?補ã?自動補完ã?設å®?[on/off]?ˆå?期å?はon??
566 * @see <a href="http://www.htmq.com/html5/input_autocomplete.shtml">autocomplete</a>
567 */
568 public void setAutocomplete( final String autocomplete ) {
569 set( "autocomplete" , getRequestParameter( autocomplete ) );
570 }
571
572 /**
573 * 【HTML5】指定したå?力æ¬?�«カーソルが当たって自動的にフォーカスされますã?
574 *
575 * @og.tag
576 * HTML5から追åŠ?�•れた新機è?ですã?
577 * autofocus属æ?を指定すると、ウェブã?ージが表示された際にã€?
578 * æŒ?®šしたå?力æ¬?�«カーソルが当たって自動的にフォーカスされますã?
579 *
580 * autofocus="autofocus" , autofocus="true" が指定された場合ã?、有効ですã?
581 * false も指定å?としては、有効ですã?(大æ–?—小文字ã?区別も不è¦?
582 * それ以外ã?æŒ?®šã?、エラーとしますã?
583 *
584 * 利用可能type:[text,search,url,tel,email,password]
585 *
586 * ※ autofocus は、論理属æ?ですã?
587 *
588 * <pre>
589 * <og:input type="text" name="userid" autofocus="autofocus" />
590 * </pre>
591 *
592 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
593 *
594 * @param atfocus カーソルが当たって自動的にフォーカスされã‚?
595 * @see <a href="http://www.htmq.com/html5/input_autofocus.shtml">autofocus</a>
596 */
597 public void setAutofocus( final String atfocus ) {
598 String autofocus = nval( getRequestParameter( atfocus ),null );
599 if( autofocus != null ) {
600 if( "autofocus".equalsIgnoreCase( autofocus ) ||
601 "true".equalsIgnoreCase( autofocus ) ) {
602 set( "autofocus","autofocus" );
603 }
604 else if( ! "false".equalsIgnoreCase( autofocus ) ) {
605 String errMsg = "autofocus には、[autofocus,true,false]以外ã?æ–?—ã?æŒ?®šできませんã€?
606 + " autofocus=[" + autofocus + "]" + HybsSystem.CR ;
607 throw new HybsSystemException( errMsg );
608 }
609 }
610 }
611
612 /**
613 * 【HTML5】正規表現で入力å?のパターンを指定しますã?
614 *
615 * @og.tag
616 * HTML5から追åŠ?�•れた新機è?ですã?
617 * 正規表現を使って入力å?のパターンを指定することができますã?
618 *
619 * 利用可能type:[text,search,url,tel,email,password]
620 *
621 * <pre>
622 * <og:input type="text" name="userid" pattern="^[0-9A-Za-z]+$" /> ※半角英数
623 * </pre>
624 *
625 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
626 *
627 * @param pattern 正規表現で入力å?のパターンを指å®?
628 * @see <a href="http://www.htmq.com/html5/input_pattern.shtml">pattern</a>
629 */
630 public void setPattern( final String pattern ) {
631 set( "pattern",getRequestParameter( pattern ) );
632 }
633
634 /**
635 * 【HTML5】å?力æ¬?�«初期表示するå†?®¹を指定しますã?
636 *
637 * @og.tag
638 * HTML5から追åŠ?�•れた新機è?ですã?
639 * placeholder属æ?でæŒ?®šしたå?がã?入力æ¬?�«初期値として表示されますã?
640 * 例えば、テキストフィールドに初期値としてã€?「検索するキーワードを入力してくださいã€?
641 * などのヒントを示してユーザーの操作を補助することができますã?
642 *
643 * 利用可能type:[text,search,url,tel,email,password]
644 *
645 * <pre>
646 * <og:input type="search" name="q" placeholder="キーワードを入åŠ? />
647 * </pre>
648 *
649 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
650 *
651 * @param placeholder 入力æ¬?�«初期表示するå†?®¹
652 * @see <a href="http://www.htmq.com/html5/input_placeholder.shtml">placeholder</a>
653 */
654 public void setPlaceholder( final String placeholder ) {
655 set( "placeholder",getRequestParameter( placeholder ) );
656 }
657
658 /**
659 * 【HTML5】ユーザーに入力å?補として提案するデータリストã?要ç´??id属æ?の値を指定しますã?
660 *
661 * @og.tag
662 * HTML5から追åŠ?�•れた新機è?ですã?
663 * ユーザーに入力å?補として提案するデータリストタグ(<datalist>)のid属æ?ã‚?
664 * こã?、list 属æ?に設定することでã€?–¢連付けができますã?
665 *
666 * ※
667 * å†?ƒ¨事情で、list属æ? に設定するキーもã?datalistタグのid属æ?に設定するキーもã?
668 * inputタグ(columnタグ)の name属æ???.sel" を標準的に使用してくださいã€?
669 *
670 * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,range,color]
671 *
672 * <pre>
673 * <og:input type="search" name="keywords" autocomplete="on" list="keywords.sel" />
674 * <og:datalist id="keywords.sel">
675 * <og:option value="ウィキペディア" />
676 * <og:option value="ウィルス対ç? />
677 * <og:option value="ウィンドウズ" />
678 * </og:datalist>
679 * </pre>
680 *
681 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
682 *
683 * @param list 入力å?補として提案するデータリストã?id属æ?の値を指å®?
684 * @see <a href="http://www.htmq.com/html5/datalist.shtml">list</a>
685 */
686 public void setList( final String list ) {
687 set( "list",getRequestParameter( list ) );
688 }
689
690 /**
691 * 【HTML5】å?力æ¬?�§入力できるæœ?°�å?を指定しますã?
692 *
693 * @og.tag
694 * HTML5から追åŠ?�•れた新機è?ですã?
695 * 数値型や日付型の入力æ¬?�§入力できるæœ?°�å?を指定することができますã?
696 *
697 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
698 *
699 * <pre>
700 * <og:input type="number" name="ninzu" min="1" max="4" />ã€??1人以ä¸?人以ä¸?
701 * </pre>
702 *
703 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
704 *
705 * @param min 入力できるæœ?°�å?
706 * @see <a href="http://www.htmq.com/html5/input_min.shtml">min</a>
707 */
708 public void setMin( final String min ) {
709 set( "min",getRequestParameter( min ) );
710 }
711
712 /**
713 * 【HTML5】å?力æ¬?�§入力できるæœ?¤§値を指定しますã?
714 *
715 * @og.tag
716 * HTML5から追åŠ?�•れた新機è?ですã?
717 * 数値型や日付型の入力æ¬?�§入力できるæœ?¤§値を指定することができますã?
718 *
719 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
720 *
721 * <pre>
722 * <og:input type="number" name="ninzu" min="1" max="4" />ã€??1人以ä¸?人以ä¸?
723 * </pre>
724 *
725 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
726 *
727 * @param max 入力できるæœ?¤§値
728 * @see <a href="http://www.htmq.com/html5/input_min.shtml">max</a>
729 */
730 public void setMax( final String max ) {
731 set( "max",getRequestParameter( max ) );
732 }
733
734 /**
735 * 【HTML5】å?力æ¬?�§刻ã‚?‚¹ãƒ?ƒƒプå?を指定するã?
736 *
737 * @og.tag
738 * HTML5から追åŠ?�•れた新機è?ですã?
739 * step属æ?を指定するとã€?数値型や日付型の入力æ¬?�§刻ã‚?‚¹ãƒ?ƒƒプå?を指定することができますã?
740 *
741 * 利用可能type:[datetime,date,month,week,time,datetime-local,number,range]
742 *
743 * <pre>
744 * <og:input type="number" name="lot" step="0.5" />ã€??単ä½?.5
745 * </pre>
746 *
747 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
748 *
749 * @param step 入力æ¬?�§刻ã‚?‚¹ãƒ?ƒƒプå?
750 * @see <a href="http://www.htmq.com/html5/input_step.shtml">step</a>
751 */
752 public void setStep( final String step ) {
753 set( "step",getRequestParameter( step ) );
754 }
755
756 /**
757 * 【HTML5】å?力å¿??を指定するã?
758 *
759 * @og.tag
760 * HTML5から追åŠ?�•れた新機è?ですã?
761 * 入力é?目がå?力å¿??であることをブラウザに知らせることができますã?
762 * 単独で、required 属æ?を使用できるようにしておきますã?
763 *
764 * フレーãƒ?ƒ¯ークの入力å¿??は、must 属æ?ですが、must 属æ?を指定したå?合にもã?
765 * シスãƒ?ƒ リソースの USE_HTML5_HEADER ã‚?true に設定してã�?‚‹場合ã?ã€?
766 * required 属æ?をå?力しますã?
767 *
768 * 利用可能type:[text,search,url,tel,email,datetime,date,month,week,time,datetime-local,number,checkbox,radio,file]
769 *
770 * ※ required は、論理属æ?ですã?
771 *
772 * <pre>
773 * <og:input type="text" name="yourname" required="required" />
774 * </pre>
775 *
776 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
777 *
778 * @param req 入力å¿??を指å®?
779 * @see <a href="http://www.htmq.com/html5/input_required.shtml">required</a>
780 */
781 public void setRequired( final String req ) {
782 String required = nval( getRequestParameter( req ),null );
783 if( required != null ) {
784 if( "required".equalsIgnoreCase( required ) ||
785 "true".equalsIgnoreCase( required ) ) {
786 set( "required","required" );
787 }
788 else if( ! "false".equalsIgnoreCase( required ) ) {
789 String errMsg = "required には、[required/true/false]以外ã?æ–?—ã?æŒ?®šできませんã€?
790 + " required=[" + required + "]" + HybsSystem.CR ;
791 throw new HybsSystemException( errMsg );
792 }
793 }
794 }
795
796 /**
797 * 【TAG】ロールをセãƒ?ƒˆしますã?
798 *
799 * @og.tag
800 * ここでæŒ?®šしたカラãƒ?ƒールをå?に、ユーザー毎ã?アクセス許可がチェãƒ?‚¯されますã?
801 * アクセス許可されなã�?�¨、表示されませんã€?
802 * こã?ロールを指定しなã�??合ã?、カラãƒ?ƒªソースのロールが使用されますã?
803 *
804 * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
805 *
806 * @param roles ロール
807 */
808 public void setRoles( final String roles ) {
809 set( "roles",getRequestParameter( roles ) );
810 }
811
812 /**
813 * 【TAG】å¿??入力を表す色に変えるかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
814 *
815 * @og.tag
816 * 初期値は、å¿??でなã�?"false") ですã?
817 * シスãƒ?ƒ リソースの USE_HTML5_HEADER がã?true にæŒ?®šされてã�?‚‹場合ã?ã€?
818 * HTML5 適用として、required 属æ?もã?出力しますã?
819 *
820 * <og:input name="PN" must="true" />
821 *
822 * @og.rev 5.2.1.0 (2010/10/01) 新規追åŠ?
823 * @og.rev 5.7.1.0 (2013/12/06) HTML5 対å¿?required属æ?)ã€?
824 *
825 * @param flag å¿??入力色に変えるかどã�?�‹[true:å¿??入åŠ?それ以å¤?å¿??でない]
826 */
827 public void setMust( final String flag ) {
828 mustType = nval( getRequestParameter( flag ),null );
829 if( "true".equalsIgnoreCase( mustType ) ) {
830 mustType = "must";
831 add( "class","must" );
832
833 // 5.7.1.0 (2013/12/06) HTML5 対å¿?required属æ?)ã€?
834 if( isUseHTML5() ) {
835 set( "required","required" );
836 }
837 }
838 }
839
840 /**
841 * 【TAG】選択å¿??入åŠ?どれかひとつå¿??)を表す色[true/mustAny/そã?他]を指定しまã�?初期値:無æŒ?®?ã€?
842 *
843 * @og.tag
844 * è¤?•°のカラãƒ??ã�?�¡、どれかひとつをå¿??とする選択å¿??入力を示す色を指定しますã?
845 * true またã?、mustAny を設定すると、class属æ?に、mustAny がセãƒ?ƒˆされますã?
846 * mustAny は、CSSファイルに初期設定されてã�?�¾すã?true またã?、mustAny 以外ã?値をセãƒ?ƒˆ
847 * すると、その値がそのまま、class属æ?にセãƒ?ƒˆされますã?でã€?�¸択å¿??のグループ化ã�?
848 * 可能ですã?
849 * なおã?実際の選択å¿??入力チェãƒ?‚¯は、ここではなくã?columnCheck タグでæŒ?®šがå¿?¦�ですã?
850 * 自動å?ç�??、mustAny="true" æŒ?®šã?場合ã?み有効ですã?
851 * 初期値は、無æŒ?®šですã?
852 *
853 * @og.rev 5.2.1.0 (2010/10/01) 新規追åŠ?
854 *
855 * @param flag 選択å¿??入のæŒ?®š[true/mustAny/そã?他]
856 */
857 public void setMustAny( final String flag ) {
858 if( mustType == null ) { // must 属æ?と同時設定時には、must 属æ?を優先しますã?
859 mustType = nval( getRequestParameter( flag ),null );
860 if( "true".equalsIgnoreCase( mustType ) ) {
861 mustType = "mustAny";
862 }
863 add( "class",mustType ); // mustType == null の場合ã?、add されませんã€?
864 }
865 }
866
867 /**
868 * 【TAG】å¿??の自動チェãƒ?‚¯用Hiddenをå?力するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
869 *
870 * @og.tag
871 * query.jsp上でmust/mustAnyæŒ?®šしたå?合に検索時ã?å¿??チェãƒ?‚¯をè?動化するための
872 * hiddenをå?力するかどã�?�‹を選択しますã?
873 * 初期値は、å?力すã‚?"true") ですã?
874 * 通常は初期値で問題ありませんがã?å¿??のåˆ?›¿をScriptで行う場合等に邪魔になるå?合が
875 * あるため出力ã?åˆ?›¿をå?来るよã�?�«しておきますã?
876 *
877 *
878 * @og.rev 5.7.2.0 (2013/01/10) 新規作æ?
879 *
880 * @param flag 自動チェãƒ?‚¯用hiddenをå?力するか[true:出åŠ?それ以å¤?出力しない]
881 */
882 public void setUseMustHidden( final String flag ) {
883 useMustHidden = nval( getRequestParameter( flag ),useMustHidden );
884 }
885
886 /**
887 * 【TAG】曖昧検索可能フィールドとして、曖昧検索方法をæŒ?®šしまã�?初期値:null)
888 *
889 * @og.tag
890 * 従来は、clazz="aimai" として、点線ã?入力フィールドã?み作æ?してã�?�¾したがã?
891 * AimaiPicker をCallするようにして、検索方法をæŒ?®šできるようにしますã?
892 * なおã?AimaiPickerは、カラãƒ??値にã€?�¸択した条件に応じã�???‚’付与するためã?
893 * result.jsp の like にはã€?¼?‚’含めなã�?§˜に記述してくださいã€?
894 *
895 * â‘?class="aimai" の設å®?(ほぼ、従来と同じ)
896 * ② AimaiPicker となるã?preタグをå?åŠ?スペã?スを含ã‚?›º定å¹?–‡字にするため)
897 * ③ aimai属æ?で、前方ä¸??、後方ä¸??、前後曖昧、完å?ä¸?? 選択が可能
898 * ④ aimai属æ?で選択した検索方法を、submit時にvalueに反映しã?result.jsp に送信するã€?
899 *
900 * aimai属æ?のæŒ?®š方法を以下に示しますã?
901 * ã€?0" またã? "V" :完å?ä¸??
902 * ã€?1" またã? "V*" :前方ä¸??
903 * ã€?2" またã? "*V" :後方ä¸??
904 * ã€?3" またã? "*V*" :前後曖昧
905 *
906 * Vはã€?,1,2,3 以外であれば、何でも構いませんã€? の位置で判定しますã?
907 *
908 * @og.rev 5.8.4.1 (2015/02/20) aimai 属æ?を追åŠ??6.2.0.0
909 *
910 * @param val 曖昧検索æŒ?®?[0,V:完å?ä¸??/1,V*:前方ä¸??/2,*V:後方ä¸??/3,*V*:前後曖昧]
911 */
912 public void setAimai( final String val ) {
913 String tmp = nval( getRequestParameter( val ),null );
914 if( tmp != null && !tmp.isEmpty() ) {
915 add( "class","aimai" ); // class 設定ã?先に行うå¿?¦�があるã€?
916
917 // 曖昧タイプã?ã€?,1,2,3,null(æŒ?®šが不æ?æ™? に再設定しなおしますã?
918 if( tmp.length() == 1 && "0,1,2,3".indexOf( tmp ) >= 0 ) {
919 aimai = Integer.parseInt( tmp );
920 }
921 else {
922 int type = 0 ; // % ã�?0å€???V:完å?ä¸?? ??0
923 if( tmp.endsWith( "%" ) ) { type = 1; } // % ã�?後ろ?�V%:前方ä¸?? ??1
924 if( tmp.startsWith( "%" ) ) { type += 2; } // % ã�?å‰? ??V:後方ä¸?? ??2
925 // 先にV%:前方ä¸??(typeを加ç®???V%:前後曖昧 ??3
926 aimai = type;
927 }
928 }
929 }
930
931 /**
932 * mustType 属æ?を取得しますã?
933 *
934 * must , mustAny 属æ?を設定するå?合に、mustType 属æ?を設定しますã?
935 * そã?設定された値を取りå?しますã?
936 * 何も設定されてã�?�ªã�?ж態では、null を返しますã?
937 *
938 * @og.rev 5.2.1.0 (2010/10/01) 新規追åŠ??
939 *
940 * @return mustType属æ?
941 */
942 protected String getMustType() {
943 return mustType ;
944 }
945
946 /**
947 * must , mustAny 属æ?をè?動化するためのhiddenタグを生成しますã?
948 *
949 * HybsSystem.MUST_KEY + mustType をキーに、指定ã?カラãƒ?��をå?として
950 * hidden を作æ?しますã?こã?値ã‚?columnChack タグで拾って must 処ç�?�—ますã?
951 * なおã?must , mustAny 属æ?を使用してã�?�ªã�??合ã?、null を返しますã?
952 *
953 * @og.rev 5.2.1.0 (2010/10/01) 新規追åŠ??
954 * @og.rev 5.7.2.0 (2014/01/10) useMustHidden対å¿?
955 *
956 * @param name mustæŒ?®šするカラãƒ?‰ã?名称
957 *
958 * @return 自動化するためのhiddenタグ
959 */
960 protected String makeMustHidden( final String name ) {
961 String rtn = "";
962 if( mustType != null && useMustHidden ) { // 5.7.2.0 (2014/01/10)
963 rtn = XHTMLTag.hidden( HybsSystem.MUST_KEY + mustType, name );
964 }
965 return rtn;
966 }
967
968 /**
969 * aimai 属æ?をè?動化するためのAimaiPicker関連タグを生成しますã?
970 *
971 * AIMAI_xxxのid属æ?をキーに、指定ã?カラãƒ??value値の??»˜加をã?JavaScriptで行いますã?
972 * そã?ための、preタグをå?力しますã?
973 *
974 * @og.rev 5.8.4.1 (2015/02/20) aimai 属æ?を追åŠ??6.2.0.0 addメソãƒ?ƒ‰は現行ã?マとしておく
975 *
976 * @param name aimaiæŒ?®šするカラãƒ?
977 *
978 * @return 自動化するためのpreタグ
979 * @og.rtnNotNull
980 */
981 protected String makeAimaiPicker( final String name ) {
982 if( aimai >= 0 ) {
983 TagBuffer tg = new TagBuffer( "pre" );
984 tg.add( "id" , "AIMAI_" + name );
985 tg.add( "class" , "aimaiClm" );
986 tg.add( "aimaiType" , String.valueOf( aimai ) );
987 tg.add( "title" , AIMAI_TITL[aimai] );
988 tg.addBody( AIMAI_TEXT[aimai] );
989 return tg.makeTag();
990
991 }
992 return "" ;
993 }
994
995 /**
996 * HTML5を使用するかどã�?�‹(true:使用する/false:使用しなã�?を取得しますã?
997 *
998 * HTML5 の機è?を有効にするには、ネイãƒ?‚£ブモードで動作させるå¿?¦�がありますã?
999 * â‘?USE_IE7_HEADER = "false" に設定するã?
1000 * ② USE_HTML5_HEADER = "true" に設定するã?
1001 * ③ IEのãƒ??ル⇒互換表示設定で、互換表示に追åŠ?�—たWebサイトから削除するã€?
1002 * ④ 同上ã?設定で、イントラサイトを互換表示で表示するのチェãƒ?‚¯を外すã€?
1003 * å¿?¦�がありますã?
1004 * こã?メソãƒ?ƒ‰で返すのは、①と②の設定ができてã�?‚Œば true、そã�?�§なければ、false を返しますã?
1005 *
1006 * (初期値:USE_IE7_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_IE7_HEADER}])ã€?
1007 * (初期値:USE_HTML5_HEADER[={@og.value org.opengion.hayabusa.common.SystemData#USE_HTML5_HEADER}])ã€?
1008 *
1009 * @og.rev 5.7.1.0 (2013/12/06) 新規追åŠ?
1010 *
1011 * @return HTML5を使用するかどã�?�‹(true:使用する/false:使用しなã�?
1012 */
1013 protected boolean isUseHTML5() {
1014 boolean useHTML5 = ! HybsSystem.sysBool( "USE_IE7_HEADER" ) // â‘?IE7互換モードが、false
1015 && HybsSystem.sysBool( "USE_HTML5_HEADER" ); // ② HTML5 ヘッãƒ??ã�?true
1016
1017 return useHTML5 ;
1018 }
1019 }