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 org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 019import static org.opengion.fukurou.util.StringUtil.nval; 020 021/** 022 * テーブルレイアウトで column タグ等の存在しない空欄箇所に挿入して、 023 * テーブルの行列の個数を合わせるタグです。 024 * 025 * 通常の空欄は、ラベルと値という2つの項目を別々のカラムに登録するように 026 * <td></td>タグが、2つ続いた形式をしていますが、一般に、 027 * 個数は表示上の都合で任意の個数の<td>タグを使用したいケースが 028 * あります。 029 * その場合、このSpaceTag を使っておけば,大量の作成済み画面を修正しなくても 030 * このクラスを修正するだけで,すべての空欄のデザインがキープできます。 031 * 032 * @og.formSample 033 * ●形式:<og:space /> 034 * ●body:なし 035 * 036 * ●Tag定義: 037 * <og:space 038 * width 【TAG】全体の大きさ(width 属性)を指定します 039 * colspan 【TAG】td部分の colspan を指定します 040 * rowspan 【TAG】ラベル、フィールド共に rowspan を指定します 041 * labelWidth 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します 042 * valueWidth 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します 043 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 044 * /> 045 * 046 * ●使用例 047 * 通常の、ラベル部、フィールド部が空の td タグを生成します。(tdタグを2つ作成します) 048 * <og:space /> 049 * 050 * td タグの大きさを指定することができます。 051 * <og:space 052 * labelWidth = "ラベル部分(前半部分)の大きさ(width 属性)を指定します。" 053 * valueWidth = "値部分(後半部分)の大きさ(width 属性)を指定します。" 054 * /> 055 * 056 * @og.group 画面部品 057 * 058 * @version 4.0 059 * @author Kazuhiko Hasegawa 060 * @since JDK5.0, 061 */ 062public class SpaceTag extends CommonTagSupport { 063 /** このプログラムのVERSION文字列を設定します。 {@value} */ 064 private static final String VERSION = "8.2.0.2 (2022/06/24)" ; 065 private static final long serialVersionUID = 820220220624L ; 066 067 // 6.2.0.0 (2015/02/27) 初期値見直し 068 private String labelWidth = ""; 069 private String valueWidth = ""; 070 private String width = ""; // 5.1.9.0 (2010/08/01) 追加 071 private String colspan = ""; // 5.1.9.0 (2010/08/01) 追加 072 private String rowspan = ""; // 6.2.0.0 (2015/02/27) rowspan 属性を追加。 073 074 /** 075 * デフォルトコンストラクター 076 * 077 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 078 */ 079 public SpaceTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 080 081 /** 082 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 083 * 084 * @return 後続処理の指示( SKIP_BODY ) 085 */ 086 @Override 087 public int doStartTag() { 088 jspPrint( makeTag() ); 089 return SKIP_BODY ; 090 } 091 092 /** 093 * タグリブオブジェクトをリリースします。 094 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 095 * 096 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 097 * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加 098 * @og.rev 6.2.0.0 (2015/02/27) rowspan 属性を追加。初期値見直し 099 */ 100 @Override 101 protected void release2() { 102 super.release2(); 103 labelWidth = ""; 104 valueWidth = ""; 105 width = ""; // 5.1.9.0 (2010/08/01) 追加 106 colspan = ""; // 5.1.9.0 (2010/08/01) 追加 107 rowspan = ""; // 6.2.0.0 (2015/02/27) rowspan 属性を追加 108 } 109 110 /** 111 * 検索条件の入力用のテキストフィールドを作成します。 112 * 113 * テーブルタグによりフィールドは分割されます。 114 * 使用時は、テーブルタグを前後に使用して下さい。 115 * 116 * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加 117 * @og.rev 6.2.0.0 (2015/02/27) rowspan 属性を追加 118 * 119 * @return 入力用のテキストフィールドタグ 120 * @og.rtnNotNull 121 */ 122 private String makeTag() { 123 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 124 125 // width が未指定の場合のみ、labelWidth、valueWidth を出力 126 if( width.isEmpty() ) { 127 rtn.append( "<td" ) 128 .append( labelWidth ) 129 .append( rowspan ) 130 .append( "></td><td" ) 131 .append( valueWidth ) 132 .append( colspan ) 133 .append( rowspan ) 134 .append( "></td>" ); 135 } 136 // width 指定あり 137 else { 138 // width が指定されると、強制的に colspan を設定する。 139 if( colspan.isEmpty() ) { 140 colspan = " colspan=\"2\" "; 141 } 142 rtn.append( "<td" ) // width が指定された場合のみ、td タグは一つしか出力されない。 143 .append( width ) 144 .append( colspan ) 145 .append( rowspan ) 146 .append( "></td>" ); 147 } 148 return rtn.toString() ; 149 } 150 151 /** 152 * 【TAG】全体の大きさ(width 属性)を指定します。 153 * 154 * @og.tag 155 * 通常の space タグは、td 2個分のタグを出力しますが、width 属性を 156 * 指定した場合は、colspan="2" を自動セットして、width 属性を設定します。 157 * (colspan属性が未設定の場合。設定されていれば、その値が使用されます。) 158 * width 属性を設定した場合は、labelWidth、valueWidth は無視されます。 159 * 単位(px,% など)は、引数で付けて下さい。 160 * 161 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 162 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 163 * @og.rev 8.2.0.2 (2022/06/24) HTML5廃止対応 164 * 165 * @param wd 幅 166 */ 167 public void setWidth( final String wd ) { 168 width = nval( getRequestParameter( wd ),width ); 169 if( width.length() > 0 ) { 170// width = " width=\"" + width + "\" "; 171 width = " style=\"width:" + width + ";\" "; // 8.2.0.2 (2022/06/24) Modify 172 } 173 } 174 175 /** 176 * 【TAG】フィールド部分の colspan を指定します。 177 * 178 * @og.tag 179 * 何も指定しない場合は、tdタグを2つ作成しますが、colspan を指定すると、 180 * 後ろの td に、ここで指定された、colspan 属性を付与します。 181 * ただし、width 属性を指定した場合だけ特殊で、td を一つだけ出力し、 182 * そこに、colspan 属性を付けます。(併用の場合のみ) 183 * 184 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 185 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 186 * 187 * @param sp フィールド部分のcolspan 188 */ 189 public void setColspan( final String sp ) { 190 // 191 colspan = nval( getRequestParameter( sp ),colspan ); 192 if( colspan != null && colspan.length() > 0 ) { 193 colspan = " colspan=\"" + colspan + "\" "; 194 } 195 } 196 197 /** 198 * 【TAG】ラベル、フィールド共に rowspan を指定します。 199 * 200 * @og.tag 201 * 通常は、ラベルとフィールドが、別のtdで囲われます。rowspan は、 202 * そのどちらの TDフィールドにも、設定します。 203 * 初期値は、rowspan を付けないです。 204 * 205 * <og:space rowspan="3" /> 206 * 207 * @og.rev 6.2.0.0 (2015/02/27) rowspan 属性を追加 208 * 209 * @param sp ラベル、フィールド部分のrowspan 210 */ 211 public void setRowspan( final String sp ) { 212 rowspan = nval( getRequestParameter( sp ),rowspan ); 213 if( rowspan.length() > 0 ) { 214 rowspan = " rowspan=\"" + rowspan + "\" "; 215 } 216 } 217 218 /** 219 * 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します。 220 * 221 * @og.tag 222 * 属性は td タグのラベル部分(前半部分)に、 width 属性で設定されます。 223 * colspan 属性は、このlabelWidth属性と同じ TD にはセットされません。 224 * ただし、通常のwidth 属性を使用した場合は、このlabelWidth属性は無視されます。 225 * 226 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 227 * @og.rev 8.2.0.2 (2022/06/24) HTML5廃止対応 228 * 229 * @param width 属性 230 */ 231 public void setLabelWidth( final String width ) { 232 labelWidth = nval( getRequestParameter( width ),labelWidth ); 233 if( labelWidth.length() > 0 ) { 234// labelWidth = " width=\"" + labelWidth + "\" "; 235 labelWidth = " style=\"width:" + labelWidth + ";\" "; // 8.2.0.2 (2022/06/24) Modify 236 } 237 } 238 239 /** 240 * 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します。 241 * 242 * @og.tag 243 * 属性は td タグの width 属性に設定されます。 244 * colspan 属性を同時に指定した場合は、このvalueWidth属性と同じ TD にセットされます。 245 * ただし、通常のwidth 属性を使用した場合は、このvalueWidth属性は無視されます。 246 * 247 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 248 * @og.rev 8.2.0.2 (2022/06/24) HTML5廃止対応 249 * 250 * @param width 属性 251 */ 252 public void setValueWidth( final String width ) { 253 valueWidth = nval( getRequestParameter( width ),valueWidth ); 254 if( valueWidth.length() > 0 ) { 255// valueWidth = " width=\"" + valueWidth + "\" "; 256 valueWidth = " style=\"width:" + valueWidth + ";\" "; // 8.2.0.2 (2022/06/24) Modify 257 } 258 } 259 260 /** 261 * このオブジェクトの文字列表現を返します。 262 * 基本的にデバッグ目的に使用します。 263 * 264 * @return このクラスの文字列表現 265 * @og.rtnNotNull 266 */ 267 @Override 268 public String toString() { 269 return ToString.title( this.getClass().getName() ) 270 .println( "VERSION" ,VERSION ) 271 .println( "width" ,width ) 272 .println( "colspan" ,colspan ) 273 .println( "rowspan" ,rowspan ) 274 .println( "labelWidth" ,labelWidth ) 275 .println( "valueWidth" ,valueWidth ) 276 .println( "Other..." ,getAttributes().getAttribute() ) 277 .fixForm().toString() ; 278 } 279}