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 = "6.4.2.0 (2016/01/29)" ; 065 private static final long serialVersionUID = 642020160129L ; 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 * 164 * @param wd 幅 165 */ 166 public void setWidth( final String wd ) { 167 width = nval( getRequestParameter( wd ),width ); 168 if( width.length() > 0 ) { 169 width = " width=\"" + width + "\" "; 170 } 171 } 172 173 /** 174 * 【TAG】フィールド部分の colspan を指定します。 175 * 176 * @og.tag 177 * 何も指定しない場合は、tdタグを2つ作成しますが、colspan を指定すると、 178 * 後ろの td に、ここで指定された、colspan 属性を付与します。 179 * ただし、width 属性を指定した場合だけ特殊で、td を一つだけ出力し、 180 * そこに、colspan 属性を付けます。(併用の場合のみ) 181 * 182 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 183 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 184 * 185 * @param sp フィールド部分のcolspan 186 */ 187 public void setColspan( final String sp ) { 188 // 189 colspan = nval( getRequestParameter( sp ),colspan ); 190 if( colspan != null && colspan.length() > 0 ) { 191 colspan = " colspan=\"" + colspan + "\" "; 192 } 193 } 194 195 /** 196 * 【TAG】ラベル、フィールド共に rowspan を指定します。 197 * 198 * @og.tag 199 * 通常は、ラベルとフィールドが、別のtdで囲われます。rowspan は、 200 * そのどちらの TDフィールドにも、設定します。 201 * 初期値は、rowspan を付けないです。 202 * 203 * <og:space rowspan="3" /> 204 * 205 * @og.rev 6.2.0.0 (2015/02/27) rowspan 属性を追加 206 * 207 * @param sp ラベル、フィールド部分のrowspan 208 */ 209 public void setRowspan( final String sp ) { 210 rowspan = nval( getRequestParameter( sp ),rowspan ); 211 if( rowspan.length() > 0 ) { 212 rowspan = " rowspan=\"" + rowspan + "\" "; 213 } 214 } 215 216 /** 217 * 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します。 218 * 219 * @og.tag 220 * 属性は td タグのラベル部分(前半部分)に、 width 属性で設定されます。 221 * colspan 属性は、このlabelWidth属性と同じ TD にはセットされません。 222 * ただし、通常のwidth 属性を使用した場合は、このlabelWidth属性は無視されます。 223 * 224 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 225 * 226 * @param width 属性 227 */ 228 public void setLabelWidth( final String width ) { 229 labelWidth = nval( getRequestParameter( width ),labelWidth ); 230 if( labelWidth.length() > 0 ) { 231 labelWidth = " width=\"" + labelWidth + "\" "; 232 } 233 } 234 235 /** 236 * 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します。 237 * 238 * @og.tag 239 * 属性は td タグの width 属性に設定されます。 240 * colspan 属性を同時に指定した場合は、このvalueWidth属性と同じ TD にセットされます。 241 * ただし、通常のwidth 属性を使用した場合は、このvalueWidth属性は無視されます。 242 * 243 * @og.rev 6.2.0.0 (2015/02/27) 初期値設定方法変更 244 * 245 * @param width 属性 246 */ 247 public void setValueWidth( final String width ) { 248 valueWidth = nval( getRequestParameter( width ),valueWidth ); 249 if( valueWidth.length() > 0 ) { 250 valueWidth = " width=\"" + valueWidth + "\" "; 251 } 252 } 253 254 /** 255 * このオブジェクトの文字列表現を返します。 256 * 基本的にデバッグ目的に使用します。 257 * 258 * @return このクラスの文字列表現 259 * @og.rtnNotNull 260 */ 261 @Override 262 public String toString() { 263 return ToString.title( this.getClass().getName() ) 264 .println( "VERSION" ,VERSION ) 265 .println( "width" ,width ) 266 .println( "colspan" ,colspan ) 267 .println( "rowspan" ,rowspan ) 268 .println( "labelWidth" ,labelWidth ) 269 .println( "valueWidth" ,valueWidth ) 270 .println( "Other..." ,getAttributes().getAttribute() ) 271 .fixForm().toString() ; 272 } 273}