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 018/** 019 * テーブルレイアウトで column タグ等の存在しない空欄箇所に挿入して、 020 * テーブルの行列の個数を合わせるタグです。 021 * 022 * 通常の空欄は、ラベルと値という2つの項目を別々のカラムに登録するように 023 * <td></td>タグが、2つ続いた形式をしていますが、一般に、 024 * 個数は表示上の都合で任意の個数の<td>タグを使用したいケースが 025 * あります。 026 * その場合、このSpaceTag を使っておけば,大量の作成済み画面を修正しなくても 027 * このクラスを修正するだけで,すべての空欄のデザインがキープできます。 028 * 029 * @og.formSample 030 * ●形式:<og:space /> 031 * ●body:なし 032 * 033 * ●Tag定義: 034 * <og:space 035 * width 【TAG】全体の大きさ(width 属性)を指定します 036 * colspan 【TAG】全体の大きさ(width 属性)を指定します 037 * labelWidth 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します 038 * valueWidth 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します 039 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 040 * /> 041 * 042 * ●使用例 043 * 通常の、ラベル部、フィールド部が空の td タグを生成します。 044 * <og:space /> 045 * 046 * td タグの大きさを指定することができます。 047 * <og:space 048 * labelWidth = "ラベル部分(前半部分)の大きさ(width 属性)を指定します。" 049 * valueWidth = "値部分(後半部分)の大きさ(width 属性)を指定します。" 050 * /> 051 * 052 * @og.group 画面部品 053 * 054 * @version 4.0 055 * @author Kazuhiko Hasegawa 056 * @since JDK5.0, 057 */ 058public class SpaceTag extends CommonTagSupport { 059 //* このプログラムのVERSION文字列を設定します。 {@value} */ 060 private static final String VERSION = "5.1.9.0 (2010/08/01)" ; 061 062 private static final long serialVersionUID = 519020100801L ; 063 064 private String labelWidth = null ; 065 private String valueWidth = null ; 066 private String width = null ; // 5.1.9.0 (2010/08/01) 追加 067 private String colspan = null ; // 5.1.9.0 (2010/08/01) 追加 068 069 /** 070 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 071 * 072 * @return 後続処理の指示( SKIP_BODY ) 073 */ 074 @Override 075 public int doStartTag() { 076 jspPrint( makeTag() ); 077 return SKIP_BODY ; 078 } 079 080 /** 081 * タグリブオブジェクトをリリースします。 082 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 083 * 084 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 085 * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加 086 */ 087 @Override 088 protected void release2() { 089 super.release2(); 090 labelWidth = null ; 091 valueWidth = null ; 092 width = null ; // 5.1.9.0 (2010/08/01) 追加 093 colspan = null ; // 5.1.9.0 (2010/08/01) 追加 094 } 095 096 /** 097 * 検索条件の入力用のテキストフィールドを作成します。 098 * 099 * テーブルタグによりフィールドは分割されます。 100 * 使用時は、テーブルタグを前後に使用して下さい。 101 * 102 * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加 103 * 104 * @return 入力用のテキストフィールドタグ 105 */ 106 private String makeTag() { 107 StringBuilder rtn = new StringBuilder(); 108 109 // width 指定 110 if( width != null && width.length() > 0 ) { 111 // width が指定されると、強制的に colspan を設定する。 112 if( colspan == null || colspan.length() == 0 ) { 113 colspan = "2"; 114 } 115 rtn.append( "<td width=\"" ); 116 rtn.append( width ); 117 rtn.append( "\" colspan=\"" ); 118 rtn.append( colspan ); 119 rtn.append( "\"></td>" ); 120 } 121 // すでに、width は未指定なので、colspan のみ出力 122 else if( colspan != null && colspan.length() > 0 ) { 123 rtn.append( "<td colspan=\"" ); 124 rtn.append( colspan ); 125 rtn.append( "\"></td>" ); 126 } 127 // width も colspan も未指定の場合のみ、labelWidth、valueWidth を出力 128 else { 129 if( labelWidth == null || labelWidth.length() == 0 ) { 130 rtn.append( "<td></td>" ); 131 } 132 else { 133 rtn.append( "<td width=\"" ); 134 rtn.append( labelWidth ); 135 rtn.append( "\"></td>" ); 136 } 137 138 if( valueWidth == null || valueWidth.length() == 0 ) { 139 rtn.append( "<td></td>" ); 140 } 141 else { 142 rtn.append( "<td width=\"" ); 143 rtn.append( valueWidth ); 144 rtn.append( "\"></td>" ); 145 } 146 } 147 return rtn.toString() ; 148 } 149 150 /** 151 * 【TAG】全体の大きさ(width 属性)を指定します。 152 * 153 * @og.tag 154 * 通常の space タグは、td 2個分のタグを出力しますが、width 属性を 155 * 指定した場合は、colspan="2" をセット下上で、width 属性に設定されます。 156 * 157 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 158 * 159 * @param width 属性 160 */ 161 public void setWidth( final String width ) { 162 this.width = getRequestParameter( width ); 163 } 164 165 /** 166 * 【TAG】全体の大きさ(width 属性)を指定します。 167 * 168 * @og.tag 169 * 属性は td タグの colspan 属性に設定されます。 170 * 171 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 172 * 173 * @param colspan 属性 174 */ 175 public void setColspan( final String colspan ) { 176 this.colspan = getRequestParameter( colspan ); 177 } 178 179 /** 180 * 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します。 181 * 182 * @og.tag 183 * 属性は td タグの width 属性に設定されます。 184 * 185 * @param width 属性 186 */ 187 public void setLabelWidth( final String width ) { 188 labelWidth = getRequestParameter( width ); 189 } 190 191 /** 192 * 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します。 193 * 194 * @og.tag 195 * 属性は td タグの width 属性に設定されます。 196 * 197 * @param width 属性 198 */ 199 public void setValueWidth( final String width ) { 200 valueWidth = getRequestParameter( width ); 201 } 202 203 /** 204 * このオブジェクトの文字列表現を返します。 205 * 基本的にデバッグ目的に使用します。 206 * 207 * @return このクラスの文字列表現 208 */ 209 @Override 210 public String toString() { 211 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 212 .println( "VERSION" ,VERSION ) 213 .println( "width" ,width ) 214 .println( "colspan" ,colspan ) 215 .println( "labelWidth" ,labelWidth ) 216 .println( "valueWidth" ,valueWidth ) 217 .println( "Other..." ,getAttributes().getAttribute() ) 218 .fixForm().toString() ; 219 } 220}