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.fukurou.util; 017 018 import org.opengion.fukurou.security.HybsCryptography; 019 020 /** 021 * XHTMLTag.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れるHTMLã‚¿ã‚°ã®ç”Ÿæ?メソãƒ?ƒ‰ã‚’集ç´?—ãŸã‚¯ãƒ©ã‚¹ã§ã™ã? 022 * 023 * 全変数?メソãƒ?ƒ‰ã¯ã€public static final 宣è¨?•れã¦ã?¾ã™ã? 024 * 025 * @version 4.0 026 * @author Kazuhiko Hasegawa 027 * @since JDK5.0, 028 */ 029 public final class XHTMLTag { 030 031 /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? */ 032 public static final String CR = System.getProperty("line.separator"); 033 034 /** ãƒãƒƒãƒ•ã‚¡ã®åˆæœŸå®¹é‡ã‚’通常より若干多ã„ç›®ã«è¨å®šã—ã¾ã™ã?(50) */ 035 public static final int BUFFER_SMALL = 50; 036 037 /** ãƒãƒƒãƒ•ã‚¡ã®åˆæœŸå®¹é‡ã‚’通常より多ã„ç›®ã«è¨å®šã—ã¾ã™ã?(200) */ 038 public static final int BUFFER_MIDDLE = 200; 039 040 /** ãƒãƒƒãƒ•ã‚¡ã®åˆæœŸå®¹é‡ã‚’通常より大å¹?«å¤šã„ç›®ã«è¨å®šã—ã¾ã™ã?(500) */ 041 public static final int BUFFER_LARGE = 500; 042 043 /** URLãƒã‚§ãƒ?‚¯ã‚ー発行用 4.3.7.1 (2009/06/08) */ 044 private static final HybsCryptography HYBS_CRYPTOGRAPHY = new HybsCryptography(); // 4.3.7.0 (2009/06/01) 045 046 /** 047 * BUTTON ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 048 * 049 */ 050 private static final String[] 051 BUTTON_KEY = { "type","name","value","onClick", 052 "id","class","lang","dir","title","style","xml:lang", 053 "disabled","tabindex","accesskey", 054 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 055 "onMouseMove","onMouseOut","onMouseOver" 056 }; 057 058 /** 059 * INPUT ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 060 * 061 */ 062 private static final String[] 063 INPUT_KEY = { "type","size","maxlength","checked","src", 064 "alt","accept","usemap","ismap", 065 "id","class","lang","dir","title","style","xml:lang", 066 "readonly","disabled","tabindex","accesskey","onClick","onChange", 067 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 068 "onMouseMove","onMouseOut","onMouseOver", 069 "onSelect","onKeydown","onKeypress","onKeyup" 070 }; 071 072 /** 073 * TEXTAREA ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 074 * 075 */ 076 private static final String[] 077 TEXTAREA_KEY = { "name","rows","cols", 078 "id","class","lang","dir","title","style","xml:lang", 079 "readonly","disabled","tabindex","accesskey","onClick", 080 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 081 "onMouseMove","onMouseOut","onMouseOver", 082 "onSelect","onKeydown","onKeypress","onKeyup" 083 }; 084 085 /** 086 * LINK ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 087 * 088 */ 089 private static final String[] 090 LINK_KEY = { "type","name","hreflang","rel","rev","charset", 091 "target","shape","coords","onClick", 092 "id","class","lang","dir","title","style","xml:lang", 093 "tabindex","accesskey", 094 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 095 "onMouseMove","onMouseOut","onMouseOver" 096 }; 097 098 /** 099 * SELECT ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 100 * 101 */ 102 private static final String[] 103 SELECT_KEY = { "size","multiple", 104 "id","class","lang","dir","title","style","xml:lang", 105 "disabled","tabindex","onClick","onChange", 106 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 107 "onMouseMove","onMouseOut","onMouseOver", 108 "onSelect","onKeydown","onKeypress","onKeyup" 109 }; 110 111 /** 112 * OPTION ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 113 * 114 */ 115 private static final String[] 116 OPTION_KEY = { "value","label","selected", 117 "id","class","lang","dir","title","style","xml:lang", 118 "disabled" 119 }; 120 121 /** 122 * FRAME ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 123 * 124 */ 125 private static final String[] 126 FRAME_KEY = { "name","longdesc","marginwidth","marginheight","noresize", 127 "scrolling","frameborder", 128 "id","class","title","style" 129 }; 130 131 /** 132 * IMAGE ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 133 * 134 */ 135 private static final String[] 136 IMAGE_KEY = { "src","alt","longdesc","width","height","usemap","ismap","name","onClick", 137 "align","border","hspace","vspace", // ã“ã?行ã?éžæŽ¨å¥¨å±žæ?ã§ã™ã? 138 "id","class","title","style","lang","dir","xml:lang", 139 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp", 140 "onMouseMove","onMouseOut","onMouseOver" 141 }; 142 143 /** 144 * FORM ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 145 * 146 */ 147 private static final String[] 148 FORM_KEY = { "action","method","enctype","accept-charset","accept","name","target", 149 "id","class","title","style","lang","dir","xml:lang" 150 }; 151 152 /** 153 * SPAN ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 154 * 155 */ 156 private static final String[] 157 SPAN_KEY = { "id","class","title","style","lang","dir","xml:lang" }; 158 159 /** 160 * PRE ã‚¿ã‚°ã®å±žæ?リストã§ã™ã? 161 * 162 */ 163 private static final String[] 164 PRE_KEY = { "id","class","title","style","lang","dir","xml:lang" }; 165 166 /** 167 * ãƒ?ƒ•ォルトコンストラクターをprivateã«ã—ã¦ã€? 168 * オブジェクトã?生æ?ã‚’ã•ã›ãªã?‚ˆã?«ã™ã‚‹ã€? 169 * 170 */ 171 private XHTMLTag() { } 172 173 /** 174 * ボタンを作æ?ã—ã¾ã™ã? 175 * 176 * <button type="å½¢å¼? name="åå‰" value="é€ä¿¡æ–?? オプション?¥?¥?¥ >ラベル</button> 177 * 178 * Attributes ã«è¨å®šã§ãる属æ?</ br> 179 * <table border="1" frame="box" rules="all" > 180 * <tr><td>name="åå‰"</td><td>オプション</td><td>LabelResource.properties ã®ã‚ー</td></tr> 181 * <tr><td>type="å½¢å¼?</td><td>å¿??</td><td>submit/reset/button</td></tr> 182 * <tr><td>value="値"</td><td>オプション</td><td>name属æ?ã¨å…±ã«é€ä¿¡ã•れるå?</td></tr> 183 * <tr><td>disabled="disabled"</td><td>オプション</td><td>ボタンを利用ã§ããªã?Š¶æ…‹ã«ã™ã‚‹å ´åˆã«æŒ?®?/td></tr> 184 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767ã®ç¯?›²ã§æ•°å—ã§æŒ?®?å°ã•ã??ã«ç§»å‹?</td></tr> 185 * <tr><td>accesskey="ショートカãƒ?ƒˆã‚ー"</td><td>オプション</td><td>æ–?—ã‚»ãƒ?ƒˆä¸ã®?‘æ–‡å—:Windowsã§ã‚れã°Altã‚ーã¨åŒæ™‚使用</td></tr> 186 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 187 * <tr><td>body="表示ã™ã‚‹ã‚¿ã‚°æ–?—å?"</td><td>オリジナル</td><td>ç”»åƒã‚„æ–?—ãªã©ãƒœã‚¿ãƒ³ä¸Šã«è¡¨ç¤ºã•ã›ãŸã„ã‚¿ã‚°ã®æ–?—å?</td></tr> 188 * </table> 189 * 190 * è¨å®šã§ãる属æ? 191 * å½¢å¼ã??? 192 * submit é€ä¿¡(サブミãƒ?ƒˆ) 193 * reset リセãƒ?ƒˆ 194 * button 汎用ボタン 195 * を指定ã—ã¾ã™ã? 196 * 197 * ラベルã«?ŒHTMLãƒ?‚スãƒ?強調æ–?—ãªã©)ã‚’ã?ã‚è¾¼ã‚?“ã¨ãŒå?æ¥ã¾ã™ã? 198 * ã¾ãŸï¼Œã‚¤ãƒ¡ãƒ¼ã‚¸ <img ?¥?¥?¥?¥> を指定ã™ã‚‹ã“ã¨ã‚?å¯èƒ½ã§ã™ã? 199 * disabled="disabled" ã®ã¨ã,ã“ã®ãƒœã‚¿ãƒ³ã®ãƒ??ã‚¿ã¯ã‚µãƒ¼ãƒã?ã«é€ä¿¡ã•れã¾ã›ã‚“ã€? 200 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 201 * 汎用属æ?ã‚’è?ç”±ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 202 * 203 * @param attri 属æ?群 204 * 205 * @return ボタンタグæ–?—å? 206 */ 207 public static String button( final Attributes attri ) { 208 String checkedType = "|submit|reset|button|"; 209 210 String type = attri.get( "type" ); 211 if( checkedType.indexOf( "|" + type + "|" ) < 0 ) { 212 String errMsg = "button タイプè¨å®šã‚¨ãƒ©ãƒ¼ [" + type + "]"; 213 throw new RuntimeException( errMsg ); 214 } 215 216 String values = attri.getAttribute( BUTTON_KEY ); 217 String body = attri.get( "body" ); 218 if( body == null ) { body = "" ; } 219 220 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 221 rtn.append("<button "); 222 rtn.append( values ); 223 rtn.append( ">" ); 224 rtn.append( body ); 225 rtn.append("</button>"); 226 227 return rtn.toString(); 228 } 229 230 /** 231 * 入力フォーãƒ?‚’作æ?ã—ã¾ã™ã? 232 * 233 * @param attri 属æ?群 234 * 235 * @return 入力フォーãƒ?‚¿ã‚°æ–?—å? 236 * @see #input( Attributes attri,String name,String value,String optAtt ) 237 */ 238 public static String input( final Attributes attri ) { 239 String name = attri.get( "name" ); 240 String value = attri.get( "value" ); 241 String optAttri = attri.get( "optionAttributes" ); 242 243 return input( attri,name,value,optAttri ); 244 } 245 246 /** 247 * 入力フォーãƒ?‚’作æ?ã—ã¾ã™ã? 248 * 249 * <input type="text" name="åå‰" value="é€ä¿¡æ–?? ....> 250 * 251 * Attributes ã«è¨å®šã§ãる属æ?</ br> 252 * <table border="1" frame="box" rules="all" > 253 * <tr><td>name="åå‰"</td><td>オプション</td><td>LabelResource.properties ã®ã‚ー</td></tr> 254 * <tr><td>type="å½¢å¼?</td><td>å¿??</td><td>text/password/checkbox/radio/submit/reset/button/image/file/hidden</td></tr> 255 * <tr><td>value="値"</td><td>オプション</td><td>name属æ?ã¨å…±ã«é€ä¿¡ã•れるå?</td></tr> 256 * <tr><td>size="30"</td><td>オプション</td><td>inputã‚¿ã‚°ã®å¤§ãã•</td></tr> 257 * <tr><td>maxlength="50"</td><td>オプション</td><td>type属æ?ãŒï½¢text?£,?¢password?£ ã®ã¨ãã?æœ?¤§æ–?—æ•°</td></tr> 258 * <tr><td>checked="checked"</td><td>オプション</td><td>type属æ?ãŒï½¢checkbox?£,?¢radio?£ ã®å ´åˆã«é¸æŠžã•れã¦ã?‚‹çŠ¶æ…‹ã«ã™ã‚‹ã€?/td></tr> 259 * <tr><td>disabled="disabled"</td><td>オプション</td><td>é¸æŠžã‚„å¤‰æ›´ã®æ“作をã§ããªã?Š¶æ…‹ã«ã™ã‚‹å ´åˆã«æŒ?®?/td></tr> 260 * <tr><td>accept="MIMEタイãƒ?</td><td>オプション</td><td>type属æ?ãŒï½¢file?£ã®å ´åˆã«å‡¦ç?¯èƒ½ãªMIMEタイプをæŒ?®?/td></tr> 261 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767ã®ç¯?›²ã§æ•°å—ã§æŒ?®?å°ã•ã??ã«ç§»å‹?</td></tr> 262 * <tr><td>accesskey="ショートカãƒ?ƒˆã‚ー"</td><td>オプション</td><td>æ–?—ã‚»ãƒ?ƒˆä¸ã®?‘æ–‡å—:Windowsã§ã‚れã°Altã‚ーã¨åŒæ™‚使用</td></tr> 263 * <tr><td>src="URL"</td><td>オプション</td><td>type属æ?ãŒï½¢image?£ã®å ´åˆé?信ボタンã®ç”»åƒURLを指å®?/td></tr> 264 * <tr><td>alt="代替æ–?—å?"</td><td>オプション</td><td>type属æ?ãŒï½¢image?£ã®å ´åˆã?ç”»åƒãŒè¡¨ç¤ºã§ããªã?¨ãã?代替æ–?—å?を指å®?/td></tr> 265 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 266 * <tr><td>body="表示ã™ã‚‹ã‚¿ã‚°æ–?—å?"</td><td>オリジナル</td><td>ç”»åƒã‚„æ–?—ãªã©ãƒœã‚¿ãƒ³ä¸Šã«è¡¨ç¤ºã•ã›ãŸã„ã‚¿ã‚°ã®æ–?—å?</td></tr> 267 * <tr><td>サãƒã?トå¤?/td><td>未実è£?/td><td>readonly属æ?ã€usemap属æ?ã€ismap属æ?ã€align属æ?</td></tr> 268 * </table> 269 * 270 * è¨å®šã§ãる属æ? 271 * å½¢å¼ã??? 272 * text ?‘行ã?ãƒ?‚ストフィールãƒ? 273 * password パスワード用ãƒ?‚ストフィールãƒ? 274 * checkbox ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹(è¤?•°é¸æŠžå¯) 275 * radio ラジオボタン(è¤?•°é¸æŠžä¸å¯) 276 * submit é€ä¿¡(サブミãƒ?ƒˆ) 277 * reset リセãƒ?ƒˆ 278 * button 汎用ボタン 279 * image イメージã«ã‚ˆã‚‹ç”»åƒã?タン 280 * file é€ä¿¡ãƒ•ァイルã®é¸æŠ? 281 * hidden 表示ã›ãšã«ã‚µãƒ¼ãƒã?ã«é€ä¿¡ã™ã‚‹ã€? 282 * を指定ã—ã¾ã™ã? 283 * 284 * ラジオボタン?ãƒã‚§ãƒ?‚¯ãƒœãƒƒã‚¯ã‚¹ã§ã‚らã‹ã˜ã‚?ãƒã‚§ãƒ?‚¯ã‚’ã—㦠285 * ãŠããŸã„å ´åˆã?,checked 属æ?ã« "checked" を登録ã—ã¾ã™ã? 286 * ファイルãƒ?‚¤ã‚¢ãƒã‚°ã®å ´åˆã?,attributesã® accept 属æ?ã« "MIMEタイãƒ? 287 * を登録ã—ã¾ã™ã? 288 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 289 * æ–?—を自由ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 290 * CSSã§ã‚¯ãƒ©ã‚¹ã‚’対å¿?class="XXXX" 291 * タブã§ç§»å‹•é?を指定ã™ã‚?tabindex="タブé?" 292 * ショートカãƒ?ƒˆã‚ーを割り当ã¦ã‚?accesskey="ショートカãƒ?ƒˆã‚ー" 293 * 294 * @param attri 属æ?群 295 * @param name åå‰ 296 * @param value 値 297 * @param optAttri オプションæ–?—å?(タグ属æ?定義ã•れã¦ã?ªã?±žæ?ã®ç™»éŒ²ç”¨æ–?—å?) 298 * 299 * @return 入力フォーãƒ?‚¿ã‚°æ–?—å? 300 */ 301 public static String input( final Attributes attri,final String name,final String value,final String optAttri ) { 302 String values = attri.getAttribute( INPUT_KEY ); 303 304 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 305 rtn.append("<input "); 306 if( name != null ) { rtn.append("name=\"").append( name ).append( "\" " ); } 307 if( value != null ) { rtn.append("value=\"").append( value ).append( "\" " ); } 308 rtn.append( values ); 309 if( optAttri != null ) { 310 rtn.append( " " ); 311 rtn.append( optAttri ); 312 } 313 rtn.append( " />" ); 314 315 return rtn.toString(); 316 } 317 318 /** 319 * 入力フォーãƒ??属æ?æƒ??ã®ã¿ã®æ–?—å?を作æ?ã—ã¾ã™ã? 320 * ã“れã¯ã€name 属æ?ã‚?value 属æ?ãªã©ã€ä¸?ˆ¬ã«éƒ½åº¦å¤‰æ›´ã•れるフィールãƒ? 321 * 以外ã?固定的ãªå±žæ?æƒ??ã‚’ã?å…ˆã«ä½œæ?ã—ã¦ãŠãå ´åˆã«ã€ä½¿ç”¨ã—ã¾ã™ã? 322 * 323 * @param attri 属æ?リスãƒ? 324 * 325 * @return 入力フォーãƒ?‚¿ã‚°ã®å±žæ?æƒ??æ–?—å? 326 */ 327 public static String inputAttri( final Attributes attri ) { 328 return attri.getAttribute( INPUT_KEY ); 329 } 330 331 /** 332 * ãƒ?‚ストエリアã®å±žæ?æƒ??ã®ã¿ã®æ–?—å?を作æ?ã—ã¾ã™ã? 333 * ã“れã¯ã€name 属æ?ã‚?value 属æ?ãªã©ã€ä¸?ˆ¬ã«éƒ½åº¦å¤‰æ›´ã•れるフィールãƒ? 334 * 以外ã?固定的ãªå±žæ?æƒ??ã‚’ã?å…ˆã«ä½œæ?ã—ã¦ãŠãå ´åˆã«ã€ä½¿ç”¨ã—ã¾ã™ã? 335 * 336 * @param attri 属æ?リスãƒ? 337 * 338 * @return ãƒ?‚ストエリアã®å±žæ?æƒ??æ–?—å? 339 */ 340 public static String textareaAttri( final Attributes attri ) { 341 return attri.getAttribute( TEXTAREA_KEY ); 342 } 343 344 /** 345 * プルãƒ?‚¦ãƒ³ç‰ã?メニューã®å±žæ?æƒ??ã®ã¿ã®æ–?—å?を作æ?ã—ã¾ã™ã? 346 * ã“れã¯ã€name 属æ?ã‚?value 属æ?ãªã©ã€ä¸?ˆ¬ã«éƒ½åº¦å¤‰æ›´ã•れるフィールãƒ? 347 * 以外ã?固定的ãªå±žæ?æƒ??ã‚’ã?å…ˆã«ä½œæ?ã—ã¦ãŠãå ´åˆã«ã€ä½¿ç”¨ã—ã¾ã™ã? 348 * 349 * @param attri 属æ?リスãƒ? 350 * 351 * @return プルãƒ?‚¦ãƒ³ç‰ã?メニューã®å±žæ?æƒ??æ–?—å? 352 */ 353 public static String selectAttri( final Attributes attri ) { 354 return attri.getAttribute( SELECT_KEY ); 355 } 356 357 /** 358 * HIDDEN フォーãƒ?‚’作æ?ã—ã¾ã™ã? 359 * 360 * id属æ?ã«ã€name ã¨åŒã˜å€¤ãŒè¨å®šã•れã¾ã™ã? 361 * 362 * @og.rev 5.5.4.0 (2012/07/02) ID属æ?追åŠ? 363 * 364 * @param name フォーãƒ??åå‰ 365 * @param value 値 366 * 367 * @return HIDDENフォーãƒ?‚¿ã‚°æ–?—å? 368 */ 369 public static String hidden( final String name,final String value ) { 370 // StringBuilder rtn = new StringBuilder( BUFFER_SMALL ); 371 372 // rtn.append("<input type=\"hidden\" "); 373 // rtn.append("name=\"" ).append( name ); 374 // rtn.append("\" value=\"").append( value ); 375 // rtn.append( "\" />" ); 376 377 // return rtn.toString(); 378 return hidden(name,value,name); 379 } 380 381 /** 382 * HIDDEN フォーãƒ?‚’作æ?ã—ã¾ã™ã? 383 * 384 * @og.rev 5.5.4.0 (2012/07/02) ID属æ?追åŠ? 385 * 386 * @param name フォーãƒ??åå‰ 387 * @param value 値 388 * @param id フォーãƒ??ID 389 * 390 * @return HIDDENフォーãƒ?‚¿ã‚°æ–?—å? 391 */ 392 public static String hidden( final String name, final String value, final String id ) { 393 StringBuilder rtn = new StringBuilder( BUFFER_SMALL ); 394 395 rtn.append( "<input type=\"hidden\" " ); 396 rtn.append( "name=\"" ).append( name ); 397 rtn.append( "\" value=\"" ).append( value ); 398 rtn.append( "\" id=\"" ).append( id ); 399 rtn.append( "\" />" ); 400 401 return rtn.toString(); 402 } 403 404 /** 405 * ãƒ?‚ストエリアを作æ?ã—ã¾ã™ã? 406 * 407 * <textarea name="åå‰" rows="4" cols="40" ....>é€ä¿¡æ–?—å? </textarea> 408 * 409 * Attributes ã«è¨å®šã§ãる属æ?</ br> 410 * <table border="1" frame="box" rules="all" > 411 * <tr><td>name="åå‰"</td><td>オプション</td><td>LabelResource.properties ã®ã‚ー</td></tr> 412 * <tr><td>rows="行数"</td><td>オプション</td><td>入力フィールドã?表示行数</td></tr> 413 * <tr><td>cols="å¹?</td><td>オプション</td><td>入力フィールドã?表示å¹?æ–?—æ•°)</td></tr> 414 * <tr><td>disabled="disabled"</td><td>オプション</td><td>é¸æŠžã‚„å¤‰æ›´ã®æ“作をã§ããªã?Š¶æ…‹ã«ã™ã‚‹å ´åˆã«æŒ?®?/td></tr> 415 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767ã®ç¯?›²ã§æ•°å—ã§æŒ?®?å°ã•ã??ã«ç§»å‹?</td></tr> 416 * <tr><td>accesskey="ショートカãƒ?ƒˆã‚ー"</td><td>オプション</td><td>æ–?—ã‚»ãƒ?ƒˆä¸ã®?‘æ–‡å—:Windowsã§ã‚れã°Altã‚ーã¨åŒæ™‚使用</td></tr> 417 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 418 * <tr><td>value="値"</td><td>オリジナル</td><td>name属æ?ã¨å…±ã«é€ä¿¡ã•れるå?</td></tr> 419 * <tr><td>body="表示ã™ã‚‹ã‚¿ã‚°æ–?—å?"</td><td>オリジナル</td><td>ç”»åƒã‚„æ–?—ãªã©ãƒœã‚¿ãƒ³ä¸Šã«è¡¨ç¤ºã•ã›ãŸã„ã‚¿ã‚°ã®æ–?—å?</td></tr> 420 * <tr><td>サãƒã?トå¤?/td><td>未実è£?/td><td>readonly属æ?</td></tr> 421 * </table> 422 * 423 * è¨å®šã§ãる属æ? 424 * 425 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 426 * æ–?—を自由ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 427 * CSSã§ã‚¯ãƒ©ã‚¹ã‚’対å¿?class="XXXX" 428 * タブã§ç§»å‹•é?を指定ã™ã‚?tabindex="タブé?" 429 * ショートカãƒ?ƒˆã‚ーを割り当ã¦ã‚?accesskey="ショートカãƒ?ƒˆã‚ー" 430 * 431 * @param attri 属æ?群 432 * 433 * @return 入力フォーãƒ?‚¿ã‚°æ–?—å? 434 */ 435 public static String textarea( final Attributes attri ) { 436 String values = attri.getAttribute( TEXTAREA_KEY ); 437 String body = attri.get( "body" ); 438 if( body == null ) { body = "" ; } 439 440 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 441 rtn.append("<textarea "); 442 rtn.append( values ); 443 rtn.append( ">" ); 444 rtn.append( body ); 445 rtn.append( "</textarea>" ); 446 447 return rtn.toString(); 448 } 449 450 /** 451 * ペã?ジリンクを作æ?ã—ã¾ã™ã? 452 * 453 * <A href="?µ?²?¬" target="ターゲãƒ?ƒˆå?>ラベル</A> 454 * 455 * Attributes ã«è¨å®šã§ãる属æ?</ br> 456 * <table border="1" frame="box" rules="all" > 457 * <tr><td>href="URL"</td><td>å¿??</td><td>リンク先ã?URLを指定ã—ã¾ã™ã?</td></tr> 458 * <tr><td>charset="æ–?—ã‚»ãƒ?ƒˆ"</td><td>オプション</td><td>リンク先ã?æ–?—コードセãƒ?ƒˆã‚’指定ã—ã¾ã™ã?</td></tr> 459 * <tr><td>hreflang="è¨?ªžã‚»ãƒ?ƒˆ"</td><td>オプション</td><td>リンク先ã?基本ã¨ãªã‚‹è¨?ªžã‚³ãƒ¼ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?</td></tr> 460 * <tr><td>type="MIMEタイãƒ?</td><td>オプション</td><td>リンク先ã?MIMEタイプをæŒ?®šã—ã¾ã™ã?</td></tr> 461 * <tr><td>name="åå‰"</td><td>オプション</td><td>ã“ã?è¦ç´?‚’リンクã®åˆ°é”点ã¨ã™ã‚‹ãŸã‚ã®åå‰ã‚’指定ã—ã¾ã™ã?</td></tr> 462 * <tr><td>rel="リンクタイãƒ?</td><td>オプション</td><td>ã“ã?æ–?›¸ã‹ã‚‰ã¿ã?href 属æ?ã§æŒ?®šã•れるリンク先ã¨ã®é–¢ä¿?/td></tr> 463 * <tr><td>rev="リンクタイãƒ?</td><td>オプション</td><td>href 属æ?ã§æŒ?®šã•れるリンク先ã‹ã‚‰ã¿ãŸã?ã“ã?æ–?›¸ã¨ã®é–¢ä¿?/td></tr> 464 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767ã®ç¯?›²ã§æ•°å—ã§æŒ?®?å°ã•ã??ã«ç§»å‹?</td></tr> 465 * <tr><td>accesskey="ショートカãƒ?ƒˆã‚ー"</td><td>オプション</td><td>æ–?—ã‚»ãƒ?ƒˆä¸ã®?‘æ–‡å—:Windowsã§ã‚れã°Altã‚ーã¨åŒæ™‚使用</td></tr> 466 * <tr><td>target="フレーãƒ?"</td><td>オプション</td><td>リンク先ã?フレーãƒ?</td></tr> 467 * <tr><td>body="表示ã™ã‚‹ã‚¿ã‚°æ–?—å?"</td><td>オリジナル</td><td>ç”»åƒã‚„æ–?—ãªã©ã‚’リンクã«ã§ãã¾ã™ã?</td></tr> 468 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 469 * <tr><td>サãƒã?トå¤?/td><td>未実è£?/td><td>shape属æ?ã€coords属æ?</td></tr> 470 * </table> 471 * 472 * è¨å®šã§ãる属æ? 473 * 474 * ラベルãªã—ã?å ´å? href属æ?ã® "URL" ãã?ã‚‚ã?を付ã‘ã¾ã™ã? 475 * 476 * target属æ?ã®ãƒ•レーãƒ?㯠477 * 478 * _top フレーãƒ?‚’解除ã—ã¦,リンク先をフレーãƒ??体ã«è¡¨ç¤ºã™ã‚‹ã€? 479 * _parent リンク先を親フレーãƒ?«è¡¨ç¤ºã™ã‚‹ã€? 480 * _self リンク先を自åˆ??身ã«è¡¨ç¤ºã™ã‚‹ã€? 481 * _blank æ–°ã—ã„ウインドウを開ã?¦?Œè¡¨ç¤ºã™ã‚‹ã€? 482 * ãã?ä»? フレーãƒ?½œæ?時ã?åå‰ã§æŒ?®šå¯èƒ½ã€? 483 * 484 * を指定ã—ã¾ã™ã? 485 * ãªã—ã?å ´å?_self (自åˆ??身)を指定ã—ã¾ã™ã? 486 * 487 * リンクメール機è? 488 * URLを,mailto:メールアドレス ã§è¨å®šã™ã‚Œã?,メールé€ä¿¡ãƒ?‚¤ã‚¢ãƒã‚°ã‚? 489 * é–‹ã事ãŒå‡ºæ¥ã¾ã™ã? 490 * ç”»åƒãƒªãƒ³ã‚¯æ©Ÿè? 491 * ç”»åƒã‚’クリãƒ?‚¯ã™ã‚‹ãƒªãƒ³ã‚¯ã¯?Œãƒ©ãƒ™ãƒ«ã®å€‹æ‰€ã« <img>ã‚¿ã‚°ã‚’è¨å®šã—ã¾ã™ã? 492 * 493 * <a href="books.html"><img src="banner.gif" width="468px" height="60px" alt="関連書ç±ç´¹ä»? border="0"></a> 494 * 495 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 496 * æ–?—を自由ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 497 * CSSã§ã‚¯ãƒ©ã‚¹ã‚’対å¿?class="XXXX" 498 * タブã§ç§»å‹•é?を指定ã™ã‚?tabindex="タブé?" 499 * ショートカãƒ?ƒˆã‚ーを割り当ã¦ã‚?accesskey="ショートカãƒ?ƒˆã‚ー" 500 * 501 * @param attri 属æ?群 502 * 503 * @return ペã?ジリンクタグæ–?—å? 504 */ 505 public static String link( final Attributes attri ) { 506 return link( attri,"" ); 507 } 508 509 /** 510 * ペã?ジリンクを作æ?ã—ã¾ã™ã? 511 * 512 * @param attri 属æ?群 513 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ ã¨ã?†æ–?—å? ç„¡ã?¨ãã? "" ) 514 * 515 * @return ペã?ジリンクタグæ–?—å? 516 */ 517 public static String link( final Attributes attri, final String urlEncode ) { 518 519 String href = addUrlEncode( attri.get( "href" ),urlEncode ); 520 521 String values = attri.getAttribute( LINK_KEY ); 522 String body = attri.get( "body" ); 523 if( body == null ) { body = attri.get( "href" ) ; } 524 525 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 526 rtn.append("<a href=\""); 527 rtn.append( href ); 528 rtn.append( "\" " ); 529 rtn.append( values ); 530 rtn.append( ">" ); 531 rtn.append( body ); 532 rtn.append( "</a>" ); 533 534 return rtn.toString(); 535 } 536 537 /** 538 * xlink å½¢å¼ã?ペã?ジリンクを作æ?ã—ã¾ã™ã? 539 * 540 * 基本çš?«ã¯ã€link ã¨åŒã˜ã§ã™ã?ã‚¢ãƒ‰ãƒ¬ã‚¹ã®æŒ?®šã‚‚ã€href ã§æŒ?®šã—ã¦ãã ã•ã„ã€? 541 * å†?ƒ¨çš?«ã€xlink:href ã«å¤‰æ›ã—ã¾ã™ã? 542 * ã¾ãŸã?URL引数をã?"&" ã§çµåˆã™ã‚‹ã®ã§ã¯ãªãã?"&amp;" ã§çµåˆã•ã›ã¾ã™ã? 543 * ã“れã¯ã€xlink ãã?ã‚‚ã?ãŒã?XML上ã«è¨˜è¿°ã•れãŸå?åˆã«ã€XMLã®ãƒ«ãƒ¼ãƒ«ã§å†åº¦ãƒ‘ã?ス 544 * ã•れる為ã§ã™ã? 545 * 546 * @param attri 属æ?群 547 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ ã¨ã?†æ–?—å? ç„¡ã?¨ãã? "" ) 548 * 549 * @return ペã?ジリンクタグæ–?—å? 550 */ 551 public static String xlink( final Attributes attri, final String urlEncode ) { 552 553 String href = addUrlEncode( attri.get( "href" ),urlEncode,"&" ); 554 555 String values = attri.getAttribute( LINK_KEY ); 556 String body = attri.get( "body" ); 557 if( body == null ) { body = attri.get( "href" ) ; } 558 559 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 560 rtn.append("<a xlink:href=\""); 561 rtn.append( href ); 562 rtn.append( "\" " ); 563 rtn.append( values ); 564 rtn.append( ">" ); 565 rtn.append( body ); 566 rtn.append( "</a>" ); 567 568 return rtn.toString(); 569 } 570 571 /** 572 * メニューを作æ?ã—ã¾ã™ã? 573 * 574 * @param attri 属æ?群 575 * @param opt é¸æŠžè‚¢(オプション) 576 * 577 * @return メニュータグæ–?—å? 578 */ 579 public static String select( final Attributes attri,final Options opt ) { 580 String name = attri.get( "name" ); 581 String optAttri = attri.get( "optionAttributes" ); 582 583 return select( attri,opt,name,optAttri ); 584 } 585 586 /** 587 * メニューを作æ?ã—ã¾ã™ã? 588 * 589 * <select size="行数" name="åå‰" multiple> 590 * <option value="é€ä¿¡æ–?—ï¼?>コメンãƒ?lt;/option> 591 * <option value="é€ä¿¡æ–?—ï¼?>コメンãƒ?lt;/option> 592 * <option value="é€ä¿¡æ–?—ï¼? selected="selected">コメンãƒ?lt;/option> 593 * </select> 594 * 595 * Attributes ã«è¨å®šã§ãる属æ?</ br> 596 * <table border="1" frame="box" rules="all" > 597 * <tr><td>name="åå‰"</td><td>オプション</td><td>LabelResource.properties ã®ã‚ー</td></tr> 598 * <tr><td>size="行数"</td><td>オプション</td><td>selectè¦ç´?‚’リストã?ãƒ?‚¯ã‚¹ã¨ã—ã¦è¡¨ç¤ºã™ã‚‹å ´åˆã?行数</td></tr> 599 * <tr><td>multiple="multiple"</td><td>オプション</td><td>é¸æŠžè‚¢ã®ä¸ã‹ã‚‰è¤?•°é¸æŠžå?æ¥ã‚‹ã‚ˆã?«ã™ã‚‹ã€?/td></tr> 600 * <tr><td>disabled="disabled"</td><td>オプション</td><td>é¸æŠžã‚„å¤‰æ›´ã®æ“作をã§ããªã?Š¶æ…‹ã«ã™ã‚‹å ´åˆã«æŒ?®?/td></tr> 601 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767ã®ç¯?›²ã§æ•°å—ã§æŒ?®?å°ã•ã??ã«ç§»å‹?</td></tr> 602 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 603 * </table> 604 * 605 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 606 * æ–?—を自由ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 607 * CSSã§ã‚¯ãƒ©ã‚¹ã‚’対å¿?class="XXXX" 608 * 609 * @param attri 属æ?群 610 * @param opt é¸æŠžè‚¢(オプション) 611 * @param name åå‰ 612 * @param optAttri オプション属æ? 613 * 614 * @return メニュータグæ–?—å? 615 */ 616 public static String select( final Attributes attri,final Options opt,final String name,final String optAttri ) { 617 String values = attri.getAttribute( SELECT_KEY ); 618 String options = opt.getOption(); 619 620 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 621 rtn.append("<select "); 622 if( name != null ) { rtn.append("name=\"").append( name ).append( "\" " ); } 623 rtn.append( values ); 624 if( optAttri != null ) { 625 rtn.append( " " ); 626 rtn.append( optAttri ); 627 } 628 rtn.append( ">" ); 629 rtn.append( options ); 630 rtn.append( "</select>" ); 631 632 return rtn.toString(); 633 } 634 635 /** 636 * オプションを作æ?ã—ã¾ã™ã? 637 * 638 * <select size="行数" name="åå‰" multiple> 639 * <option value="é€ä¿¡æ–?—ï¼?>コメンãƒ?lt;/option> 640 * <option value="é€ä¿¡æ–?—ï¼?>コメンãƒ?lt;/option> 641 * <option value="é€ä¿¡æ–?—ï¼? selected="selected">コメンãƒ?lt;/option> 642 * </select> 643 * 644 * Attributes ã«è¨å®šã§ãる属æ?</ br> 645 * <table border="1" frame="box" rules="all" > 646 * <tr><td>value="値"</td><td>オプション</td><td>é€ä¿¡ã™ã‚‹å€¤</td></tr> 647 * <tr><td>selected="selected"</td><td>オプション</td><td>é¸æŠžè‚¢ã‚’ã‚らã‹ã˜ã‚é¸æŠžã•れãŸçŠ¶æ…‹ã«ã—ã¦ãŠã</td></tr> 648 * <tr><td>disabled="disabled"</td><td>オプション</td><td>é¸æŠžã‚„å¤‰æ›´ã®æ“作をã§ããªã?Š¶æ…‹ã«ã™ã‚‹å ´åˆã«æŒ?®?/td></tr> 649 * <tr><td>body="表示ã™ã‚‹ã‚¿ã‚°æ–?—å?"</td><td>オリジナル</td><td>é¸æŠžè‚¢ã«è¡¨ç¤ºã•ã›ãŸã„ã‚¿ã‚°ã®æ–?—å?</td></tr> 650 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 651 * </table> 652 * 653 * セレクタã¨ã¯?Œãƒªã‚¹ãƒˆã?ãƒ?‚¯ã‚¹ã‚?ƒ¡ãƒ‹ãƒ¥ãƒ¼ãªã©ã® option引数ã«ã‚»ãƒ?ƒˆã™ã‚‹ 654 * è¤?•°ã®ãƒ??ã‚¿ã‚’optionã‚¿ã‚°ã§ãã‚‹ã‚“ã ã‚‚ã?ã§ã™ã? 655 * 656 * @param attri 属æ?群 657 * 658 * @return オプションタグæ–?—å? 659 */ 660 public static String option( final Attributes attri ) { 661 String values = attri.getAttribute( OPTION_KEY ); 662 String body = attri.get( "body" ); 663 if( body == null ) { body = "No Label" ; } 664 665 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 666 rtn.append("<option "); 667 rtn.append( values ); 668 rtn.append( " >" ); 669 rtn.append( body ); 670 rtn.append( "</option>" ); 671 672 return rtn.toString(); 673 } 674 675 /** 676 * フレーãƒ?‚¿ã‚°ã‚’作æ?ã—ã¾ã™ã? 677 * 678 * <frame marginheight="2px" marginwidth="2px" src="query.jsp" name="QUERY" /> 679 * 680 * Attributes ã«è¨å®šã§ãる属æ?</ br> 681 * <table border="1" frame="box" rules="all" > 682 * <tr><td>src="URL"</td><td>オプション</td><td>フレーãƒ??表示å…?RLを指定ã—ã¾ã™ã?</td></tr> 683 * <tr><td>name="フレーãƒ?"</td><td>オプション</td><td>フレーãƒ?«ä»˜ã‘ã‚‹åå‰ã‚’æŒ?®šã—ã¾ã™ã?</td></tr> 684 * <tr><td>longdesc="URI"</td><td>オプション</td><td>フレーãƒ??詳ã—ã„説明ã?URI</td></tr> 685 * <tr><td>marginwidth="å·¦å³ã®ãƒžã?ジン"</td><td>オプション</td><td>フレーãƒ??ã®å·¦å³ã®ãƒžã?ジンを指定ã—ã¾ã™ã?</td></tr> 686 * <tr><td>marginheight="上下ã?マã?ジン"</td><td>オプション</td><td>フレーãƒ??ã®ä¸Šä¸‹ã?マã?ジンを指定ã—ã¾ã™ã?</td></tr> 687 * <tr><td>noresize="noresize"</td><td>オプション</td><td>フレーãƒ?‚µã‚¤ã‚ºã‚’変更ã§ããªã?‚ˆã?«ã—ã¾ã™ã?</td></tr> 688 * <tr><td>scrolling="スクãƒãƒ¼ãƒ«ã®åˆ¶å¾¡"</td><td>オプション</td><td>yes:スクãƒãƒ¼ãƒ«ãƒã?を表示 no:表示ã—ãªã?auto:å¿?¦ã«å¿œã˜ã¦è¡¨ç¤º(ãƒ?ƒ•ォルãƒ?</td></tr> 689 * <tr><td>frameborder="æž??表示"</td><td>オプション</td><td>0:æž?‚’表示ã—ãªã? 1:æž?‚’表示ã™ã‚‹ã€?ãƒ?ƒ•ォルãƒ?</td></tr> 690 * <tr><td>keys="引数ã«ã‚»ãƒ?ƒˆã™ã‚‹ã‚ー"</td><td>オプション</td><td>URI ã®å¼•æ•°ã«ã‚»ãƒ?ƒˆã™ã‚‹ã‚ーã‚?CSV å½¢å¼ã§ã‚»ãƒ?ƒˆã—ã¾ã™ã?</td></tr> 691 * <tr><td>value="引数ã«ã‚»ãƒ?ƒˆã™ã‚‹å€¤"</td><td>オプション</td><td>URI ã®å¼•æ•°ã«ã‚»ãƒ?ƒˆã™ã‚‹å€¤ã‚?CSV å½¢å¼ã§ã‚»ãƒ?ƒˆã—ã¾ã™ã?</td></tr> 692 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style</td></tr> 693 * </table> 694 * 695 * è¨å®šã§ãる属æ? 696 * 697 * scrolling属æ? 698 * 699 * yes:常ã«ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãƒã?を表示 700 * no:常ã«ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãƒã?を表示ã—ãªã? 701 * auto:å¿?¦ã«å¿œã˜ã¦ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãƒã?を表示(ãƒ?ƒ•ォルãƒ? 702 * 703 * を指定ã—ã¾ã™ã? 704 * 705 * frameborder属æ? 706 * 707 * 0:æž?‚’表示ã—ãªã? 708 * 1:æž?‚’表示ã™ã‚‹ã€?ãƒ?ƒ•ォルãƒ? 709 * 710 * を指定ã—ã¾ã™ã? 711 * 712 * 属æ?群ã¯,ã‚¿ã‚°ã®ä¸ã«,CSSç‰ã§ä½¿ç”¨ã§ãã‚‹ class="XXX" ãªã©ã® 713 * æ–?—を自由ã«ç™»éŒ²ã™ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã? 714 * CSSã§ã‚¯ãƒ©ã‚¹ã‚’対å¿?class="XXXX" 715 * 716 * @param attri 属æ?群 717 * 718 * @return フレーãƒ?‚¿ã‚°æ–?—å? 719 */ 720 public static String frame( final Attributes attri ) { 721 return frame( attri,"" ); 722 } 723 724 /** 725 * フレーãƒ?‚¿ã‚°ã‚’作æ?ã—ã¾ã™ã? 726 * 727 * @param attri 属æ?群 728 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ ã¨ã?†æ–?—å? ç„¡ã?¨ãã? "" ) 729 * 730 * @return フレーãƒ?‚¿ã‚°æ–?—å? 731 */ 732 public static String frame( final Attributes attri,final String urlEncode ) { 733 734 String src = addUrlEncode( attri.get( "src" ),urlEncode ); 735 String values = attri.getAttribute( FRAME_KEY ); 736 737 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 738 rtn.append("<frame src=\""); 739 rtn.append( src ); 740 rtn.append( "\" " ); 741 rtn.append( values ); 742 rtn.append( " />" ); 743 744 return rtn.toString(); 745 } 746 747 /** 748 * URLエンコード文å—å?を作æ?ã—ã¾ã™ã? 749 * エンコードã™ã¹ãæ–‡å—å?ãŒç„¡ã??åˆã?, ?ストリング("") ã‚’è¿”ã—ã¾ã™ã? 750 * エンコード文å—å?ãŒã‚ã‚‹å?åˆã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" ã¨ã?†æ–?—å?ã‚? 751 * è¿”ã—ã¾ã™ã? 752 * ã¤ã¾ã‚Šã?ã©ã¡ã‚‰ã?ケースã§ã‚‚ã?URI 㫠連çµã•ã›ã‚Œã°ã‚ˆã„ã“ã¨ã«ãªã‚Šã¾ã™ã? 753 * 754 * @param keys URLã®å¼•æ•°ã¨ãªã‚‹ã‚ー群 755 * @param values URLã®å¼•æ•°ã¨ãªã‚‹å?群 756 * 757 * @return URLエンコード文å—å? 758 */ 759 public static String urlEncode( final String keys,final String values ) { 760 return urlEncode( keys,values,"&" ); 761 } 762 763 /** 764 * URLエンコード文å—å?を作æ?ã—ã¾ã™ã? 765 * エンコードã™ã¹ãæ–‡å—å?ãŒç„¡ã??åˆã?, ?ストリング("") ã‚’è¿”ã—ã¾ã™ã? 766 * エンコード文å—å?ãŒã‚ã‚‹å?åˆã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" ã¨ã?†æ–?—å?ã‚? 767 * è¿”ã—ã¾ã™ã? 768 * ã¤ã¾ã‚Šã?ã©ã¡ã‚‰ã?ケースã§ã‚‚ã?URI 㫠連çµã•ã›ã‚Œã°ã‚ˆã„ã“ã¨ã«ãªã‚Šã¾ã™ã? 769 * 770 * @param keys URLã®å¼•æ•°ã¨ãªã‚‹ã‚ー群 771 * @param values URLã®å¼•æ•°ã¨ãªã‚‹å?群 772 * @param join URLã®å¼•数群をé?çµã•ã›ã‚‹æ–?—å? 773 * 774 * @return URLエンコード文å—å? 775 */ 776 public static String urlEncode( final String keys,final String values,final String join ) { 777 if( keys == null || values == null ) { return ""; } 778 779 String[] key = StringUtil.csv2Array( keys ); 780 String[] val = StringUtil.csv2Array( values ); 781 782 return ( urlEncode( key,val,join ) ); 783 } 784 785 /** 786 * URLエンコード文å—å?を作æ?ã—ã¾ã™ã? 787 * エンコードã™ã¹ãæ–‡å—å?ãŒç„¡ã??åˆã?, ?ストリング("") ã‚’è¿”ã—ã¾ã™ã? 788 * エンコード文å—å?ãŒã‚ã‚‹å?åˆã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" ã¨ã?†æ–?—å?ã‚? 789 * è¿”ã—ã¾ã™ã? 790 * ã¤ã¾ã‚Šã?ã©ã¡ã‚‰ã?ケースã§ã‚‚ã?URI 㫠連çµã•ã›ã‚Œã°ã‚ˆã„ã“ã¨ã«ãªã‚Šã¾ã™ã? 791 * 792 * @param key URLã®å¼•æ•°ã¨ãªã‚‹ã‚ーã®é…å? 793 * @param val URLã®å¼•æ•°ã¨ãªã‚‹å?ã®é…å? 794 * 795 * @return URLエンコード文å—å? 796 */ 797 public static String urlEncode( final String[] key,final String[] val ) { 798 return urlEncode( key,val,"&" ); 799 } 800 801 /** 802 * URLエンコード文å—å?を作æ?ã—ã¾ã™ã? 803 * エンコードã™ã¹ãæ–‡å—å?ãŒç„¡ã??åˆã?, ?ストリング("") ã‚’è¿”ã—ã¾ã™ã? 804 * エンコード文å—å?ãŒã‚ã‚‹å?åˆã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" ã¨ã?†æ–?—å?ã‚? 805 * è¿”ã—ã¾ã™ã? 806 * ã¤ã¾ã‚Šã?ã©ã¡ã‚‰ã?ケースã§ã‚‚ã?URI 㫠連çµã•ã›ã‚Œã°ã‚ˆã„ã“ã¨ã«ãªã‚Šã¾ã™ã? 807 * 808 * @og.rev 4.3.3.3 (2008/10/22) valã«å¯¾ã—ã¦å‰¯ä½œç”¨ã‚’åŠã¼ã•ãªã?‚ˆã?«ä¿®æ£ 809 * 810 * @param key URLã®å¼•æ•°ã¨ãªã‚‹ã‚ーã®é…å? 811 * @param val URLã®å¼•æ•°ã¨ãªã‚‹å?ã®é…å? 812 * @param join URLã®å¼•数群をé?çµã•ã›ã‚‹æ–?—å? 813 * 814 * @return URLエンコード文å—å? 815 */ 816 public static String urlEncode( final String[] key,final String[] val,final String join ) { 817 if( key == null || key.length == 0 || val == null || val.length == 0 ) { 818 return ""; 819 } 820 else if( key.length != val.length ) { 821 String errMsg = "urlEncode ã®ã‚ーã¨ãƒãƒªãƒ¥ãƒ¼ã®å€‹æ•°ãŒç•°ãªã‚Šã¾ã™ã?" + CR 822 + "key.length=[" + key.length + "] val.length=[" + val.length + "]"; 823 throw new RuntimeException( errMsg ); 824 } 825 826 // 4.3.3.3 (2008/10/22) 827 String[] tval = new String[val.length]; 828 829 for( int i=0; i<val.length; i++ ) { 830 if( key[i] == null || key[i].length() == 0 ) { return ""; } 831 if( val[i] == null || val[i].length() == 0 ) { tval[i] = ""; } 832 else if( val[i].charAt(0) == '[' ) { // 暫定対å¿? 833 tval[i] = val[i]; 834 } 835 else { 836 tval[i] = StringUtil.urlEncode( val[i] ); 837 } 838 // else if( val[i].charAt(0) != '[' ) { // 暫定対å¿? 839 // tval[i] = StringUtil.urlEncode( val[i] ); 840 // } 841 // else { 842 // tval[i] = val[i]; 843 // } 844 } 845 846 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 847 848 rtn.append( key[0] ).append( "=" ).append( tval[0] ); 849 for( int i=1; i<key.length; i++) { 850 rtn.append( join ); 851 rtn.append( key[i] ).append( "=" ).append( tval[i] ); 852 } 853 return rtn.toString(); 854 } 855 856 /** 857 * URLæ–?—å?ã«ã€URLエンコード文å—å?ã‚’é?çµã—ã¾ã™ã? 858 * 859 * URLæ–?—å?ä¸ã«ã™ã§ã« "?" æ–?—ãŒå˜åœ¨ã™ã‚‹å ´åˆã?ã€URLエンコードå?ã® 860 * æ–?—å?ã¨ã¯ã€?"&" ã§é€£çµã—ã¾ã™ã? 861 * é€?«ã€??" ãŒå˜åœ¨ã—ãªã‘れã°ã€??" ã§é€£çµã—ã¾ã™ã? 862 * URLエンコード文å—å?ã?null ã®å ´åˆã?ã€??çµã—ã¾ã›ã‚“ã€? 863 * 864 * @param url URLæ–?—å? 865 * @param encode URLエンコード文å—å? 866 * 867 * @return é€£çµæ–‡å—å? 868 */ 869 public static String addUrlEncode( final String url,final String encode ) { 870 return addUrlEncode( url,encode,"&" ); 871 } 872 873 /** 874 * URLæ–?—å?ã«ã€URLエンコード文å—å?ã‚’é?çµã—ã¾ã™ã? 875 * 876 * URLæ–?—å?ä¸ã«ã™ã§ã« "?" æ–?—ãŒå˜åœ¨ã™ã‚‹å ´åˆã?ã€URLエンコードå?ã® 877 * æ–?—å?ã¨ã¯ã€?join (ä¾?"&" ) ã§é€£çµã—ã¾ã™ã? 878 * é€?«ã€??" ãŒå˜åœ¨ã—ãªã‘れã°ã€??" ã§é€£çµã—ã¾ã™ã? 879 * URLエンコード文å—å?ã?null ã®å ´åˆã?ã€??çµã—ã¾ã›ã‚“ã€? 880 * 連çµã™ã‚‹ã?encode æ–?—å?ã®å…ˆé?ãŒã?join æ–?—å?ã®å ´åˆã?ãã?ã¾ã¾é€£çµã—ã¾ã™ã? 881 * å…ˆé?ãŒã?ãã†ã§ãªã??åˆã?ã€join æ–?—å?ã§é€£çµã—ã¾ã™ã? 882 * "?" ãŒå˜åœ¨ã›ãšã€encode æ–?—å?ã®å…ˆé?ãŒã?join æ–?—å?ã®å ´åˆã?ã€ã? 883 * encode æ–?—å?ã®å…ˆé?ã‚’å–り除ã?¦ã€??" ã§é€£çµã—ã¾ã™ã? 884 * 885 * 例ï¼? 886 * â‘? abc.html key1=val1&key2=val2 â‡?abc.html?key1=val1&key2=val2 887 * â‘¡?Žabc.html &key1=val1&key2=val2 â‡?abc.html?key1=val1&key2=val2 888 * â‘¢?Žabc.html?key1=val1 key2=val2 â‡?abc.html?key1=val1&key2=val2 889 * â‘£?Žabc.html?key1=val1 &key2=val2 â‡?abc.html?key1=val1&key2=val2 890 * 891 * @og.rev 5.2.1.0 (2010/10/01) urlãŒnullã®å ´åˆã«ã€NullPointerExceptionãŒç™ºç”Ÿã™ã‚‹ãƒã‚°ã‚’ä¿®æ£ 892 * 893 * @param url URLæ–?—å? 894 * @param encode URLエンコード文å—å? 895 * @param join URLã®å¼•数群をé?çµã•ã›ã‚‹æ–?—å? 896 * 897 * @return é€£çµæ–‡å—å? 898 */ 899 public static String addUrlEncode( final String url,final String encode,final String join ) { 900 // 5.2.1.0 (2010/10/01) urlãŒnullã®å ´åˆã«ã€NullPointerExceptionãŒç™ºç”Ÿã™ã‚‹ãƒã‚°ã‚’ä¿®æ£ 901 String tmpUrl = ( url == null ? "" : url ); 902 903 if( encode == null || encode.length() == 0 ) { return tmpUrl; } 904 905 final String rtn ; 906 if( tmpUrl.indexOf( '?' ) < 0 ) { 907 if( encode.startsWith( join ) ) { 908 rtn = tmpUrl + "?" + encode.substring(join.length()); // â‘¡ 909 } 910 else { 911 rtn = tmpUrl + "?" + encode; // â‘? 912 } 913 } 914 else { 915 if( encode.startsWith( join ) ) { 916 rtn = tmpUrl + encode; // â‘£ 917 } 918 else { 919 rtn = tmpUrl + join + encode; // â‘¢ 920 } 921 } 922 return rtn ; 923 } 924 925 /** 926 * æŒ?®šä½ç½®ã«ç”»åƒã‚’é…ç½®ã—ã¾ã™ã? 927 * 928 * @param attri 属æ?群 929 * 930 * @return イメージタグæ–?—å? 931 */ 932 public static String img( final Attributes attri ) { 933 String values = attri.getAttribute( IMAGE_KEY ); 934 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 935 rtn.append( "<img " ); 936 rtn.append( values ); 937 rtn.append( " />" ); 938 939 return rtn.toString(); 940 } 941 942 /** 943 * フォーãƒ?‚’作æ?ã—ã¾ã™ã? 944 * 945 * <form action="URI" method="HTTPメソãƒ?ƒ‰" enctype="MIMEタイãƒ? target="フレーãƒ?" ?¥?¥?¥ >フォーãƒ??lt;/form> 946 * 947 * Attributes ã«è¨å®šã§ãる属æ?</ br> 948 * <table border="1" frame="box" rules="all" > 949 * <tr><td>action="URI"</td><td>å¿??</td><td>é€ä¿¡ã•れãŸãƒ•ォーãƒ?ƒ‡ãƒ¼ã‚¿ã‚’å?ç?™ã‚‹ã?ãƒã‚°ãƒ©ãƒ?¼µ?²?©</td></tr> 950 * <tr><td>method="HTTPメソãƒ?ƒ‰"</td><td>オプション</td><td>get/post</td></tr> 951 * <tr><td>enctype="MIMEタイãƒ?</td><td>オプション</td><td>フォーãƒ?ƒ‡ãƒ¼ã‚¿é€ä¿¡æ™‚ã?MIMEタイãƒ?/td></tr> 952 * <tr><td>accept-charset="æ–?—ã‚»ãƒ?ƒˆ"</td><td>オプション</td><td>ãƒ??ã‚¿ã¨ã—ã¦å—付å¯èƒ½ãªæ–?—ã‚»ãƒ?ƒˆã®æŒ?®?/td></tr> 953 * <tr><td>accept="MIMEタイãƒ?</td><td>オプション</td><td>ãƒ??ã‚¿ã¨ã—ã¦å‡¦ç?¯èƒ½ãªMIMEタイプをæŒ?®?/td></tr> 954 * <tr><td>name="åå‰"</td><td>オプション</td><td>スクリプトç‰ã‹ã‚‰å‚ç…§ã™ã‚‹å ´åˆã?åå‰</td></tr> 955 * <tr><td>target="フレーãƒ?"</td><td>オプション</td><td>フォーãƒ?‚’é€ä¿¡ã—ãŸçµæžœã‚’表示ã•ã›ã‚‹ãƒ•レーãƒ?/td></tr> 956 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 957 * <tr><td>body="フォーãƒ?‰ã?æ–?—å?"</td><td>å¿??</td><td>input ç‰ã?フォーãƒ?¦ç´?/td></tr> 958 * </table> 959 * 960 * @param attri 属æ?群 961 * 962 * @return フォーãƒ?‚¿ã‚°æ–?—å? 963 */ 964 public static String form( final Attributes attri ) { 965 String values = attri.getAttribute( FORM_KEY ); 966 String body = attri.get( "body" ); 967 if( body == null ) { body = "" ; } 968 969 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 970 rtn.append("<form "); 971 rtn.append( values ); 972 rtn.append( ">" ); 973 rtn.append( CR ); 974 rtn.append( body ); 975 rtn.append( CR ); 976 rtn.append("</form>"); 977 978 return rtn.toString(); 979 } 980 981 /** 982 * 汎用インラインè¦ç´?SPAN)を作æ?ã—ã¾ã™ã? 983 * 984 * <span class="XXXX" ?¥?¥?¥ >ãƒ?‚ストç?lt;/span> 985 * 986 * Attributes ã«è¨å®šã§ãる属æ?</ br> 987 * <table border="1" frame="box" rules="all" > 988 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 989 * <tr><td>body="ãƒ?‚ストç‰ã?æ–?—å?"</td><td>オプション</td><td>ã“ã?ãƒ?‚ストを修飾ã—ã¾ã™ã?</td></tr> 990 * </table> 991 * 992 * @param attri 属æ?群 993 * 994 * @return SPANã‚¿ã‚°æ–?—å? 995 */ 996 public static String span( final Attributes attri ) { 997 String values = attri.getAttribute( SPAN_KEY ); 998 999 String optAttri = attri.get( "optionAttributes" ); 1000 String body = attri.get( "body" ); 1001 if( body == null ) { body = "" ; } 1002 1003 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 1004 rtn.append("<span "); 1005 rtn.append( values ); 1006 if( optAttri != null ) { 1007 rtn.append( " " ); 1008 rtn.append( optAttri ); 1009 } 1010 rtn.append( ">" ); 1011 rtn.append( body ); 1012 rtn.append( "</span>" ); 1013 1014 return rtn.toString(); 1015 } 1016 1017 /** 1018 * 整形済ã¿ãƒ?‚スãƒ?PRE)を作æ?ã—ã¾ã™ã? 1019 * 1020 * <pre class="XXXX" ?¥?¥?¥ >ãƒ?‚ストç?lt;/pre> 1021 * 1022 * Attributes ã«è¨å®šã§ãる属æ?</ br> 1023 * <table border="1" frame="box" rules="all" > 1024 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr> 1025 * <tr><td>body="ãƒ?‚ストç‰ã?æ–?—å?"</td><td>オプション</td><td>ã“ã?ãƒ?‚ストを修飾ã—ã¾ã™ã?</td></tr> 1026 * </table> 1027 * 1028 * @param attri 属æ?群 1029 * 1030 * @return PREã‚¿ã‚°æ–?—å? 1031 */ 1032 public static String pre( final Attributes attri ) { 1033 String values = attri.getAttribute( PRE_KEY ); 1034 1035 String optAttri = attri.get( "optionAttributes" ); 1036 String body = attri.get( "body" ); 1037 if( body == null ) { body = "" ; } 1038 1039 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 1040 rtn.append("<pre "); 1041 rtn.append( values ); 1042 if( optAttri != null ) { 1043 rtn.append( " " ); 1044 rtn.append( optAttri ); 1045 } 1046 rtn.append( ">" ); 1047 rtn.append( body ); 1048 rtn.append( "</pre>" ); 1049 1050 return rtn.toString(); 1051 } 1052 1053 /** 1054 * URLãƒã‚§ãƒ?‚¯ç”¨ã®ã‚ーを返ã—ã¾ã™ã? 1055 * 1056 * å¼•æ•°ã«æŒ?®šã•れãŸhrefã«å¯¾ã—ã¦ã€æ™‚é–“ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼IDã‚’ä»˜åŠ ã—ãŸæš—å·åŒ–æ–‡å—å?ã‚? 1057 * 引数ã«è¿½åŠ?—ã¾ã™ã? 1058 * 1059 * æš—å·åŒ–ã?ã€org.opengion.fukurou.util.HybsCryptographyを使用ã—ã¾ã™ã? 1060 * æš—å·åŒ–ã‚’è¡Œã†æ–?—å?ã®ãƒ•ォーマットã?ã€[href],time=[checkTime],userid=[loginUser]ã§ã™ã? 1061 * 1062 * @og.rev 4.3.7.1 (2009/06/08) æ–°è¦è¿½åŠ? 1063 * @og.rev 4.3.7.4 (2009/07/01) 循環å‚ç?ã‚’è§£æ¶? 1064 * 1065 * @param href ãƒã‚§ãƒ?‚¯å¯¾è±¡ã®URL 1066 * @param key ãƒã‚§ãƒ?‚¯ã‚ーã®ãƒ‘ラメーターã‚ー 1067 * @param userid ユーザーID 1068 * @param time 有効時間 1069 * 1070 * @return ãƒã‚§ãƒ?‚¯ã‚ー 1071 * @see org.opengion.fukurou.security.HybsCryptography 1072 */ 1073 public static String addURLCheckKey( final String href, final String key, final String userid, final long time ) { 1074 String checkKey = href; 1075 1076 checkKey = checkKey.replace( "../", "" ); 1077 // int idx = 0; 1078 // if ( ( idx = checkKey.indexOf( '#' ) ) >= 0 ) { 1079 // checkKey = checkKey.substring( 0, idx ); 1080 // } 1081 // if ( ( idx = checkKey.indexOf( '?' ) ) >= 0 ) { 1082 // checkKey = checkKey.substring( 0, idx ); 1083 // } 1084 checkKey = checkKey + ",time=" + time + ",userid=" + userid; 1085 checkKey = HYBS_CRYPTOGRAPHY.encrypt( checkKey ); 1086 1087 return addUrlEncode( href, key + "=" + checkKey ); 1088 } 1089 1090 /** 1091 * Aã‚¿ã‚°ã®æ–?—å?ã‚’è§£æžã—ã¦ã€href属æ?ã«URLãƒã‚§ãƒ?‚¯ç”¨ã®æš—å·åŒ–æ–‡å—å?ã‚’ä»˜åŠ ã—ãŸå½¢ã§ã€? 1092 * Aã‚¿ã‚°ã‚’å?構築ã—ã€è¿”ã—ã¾ã™ã? 1093 * 1094 * @og.rev 4.3.7.1 (2009/06/08) æ–°è¦è¿½åŠ? 1095 * @og.rev 4.3.7.4 (2009/07/01) 循環å‚ç?ã‚’è§£æ¶? 1096 * 1097 * @param tag Aã‚¿ã‚°æ–?—å? 1098 * @param key ãƒã‚§ãƒ?‚¯ã‚ーã®ãƒ‘ラメーターã‚ー 1099 * @param userid ユーザーID 1100 * @param time 有効時間 1101 * 1102 * @return URLãƒã‚§ãƒ?‚¯ã‚ーãŒä»˜åŠ ã•れãŸAã‚¿ã‚°æ–?—å? 1103 */ 1104 public static String embedURLCheckKey( final String tag, final String key, final String userid, final long time ) { 1105 String rtn = tag; 1106 int hrefStr = rtn.indexOf( "href=\"" ); 1107 if( hrefStr >= 0 ) { 1108 int hrefEnd = rtn.indexOf( "\"",hrefStr + 6 ); 1109 if( hrefEnd >= 0 ) { 1110 String href = rtn.substring( hrefStr + 6, hrefEnd ); 1111 href = XHTMLTag.addURLCheckKey( href, key, userid, time ); 1112 rtn = rtn.substring( 0, hrefStr ) + "href=\"" + href + rtn.substring( hrefEnd ); 1113 } 1114 } 1115 return rtn; 1116 } 1117 }