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.hayabusa.common.HybsSystem; 019import org.opengion.fukurou.util.XHTMLTag; 020 021import static org.opengion.fukurou.util.StringUtil.nval ; 022 023/** 024 * ラジオボタンで表示順(Order By 句)を指定するタグです。 025 * 026 * name 属性値は、 "ORDER_BY" 固定です。 027 * columns 属性は、カンマ区切りのカラム属性を設定します。 028 * ロケールは、ユーザー情報の lang 属性を初期値で使用し、 セットされていない場合は、 029 * リクエスト情報のロケールから取得します。 030 * 031 * @og.formSample 032 * ●形式:<og:orderBy columns="…" /> 033 * ●body:なし 034 * 035 * ●Tag定義: 036 * <og:orderBy 037 * columns ○【TAG】表示順対象のカラムをCSV形式で複数指定します(必須)。 038 * checked 【TAG】初めからチェックされた状態(checked)で表示します 039 * lbls 【TAG】ラベルをCSV形式で複数指定します 040 * checkedValue 【TAG】初めからチェックされた状態にする値を指定します 041 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 042 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 043 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true) 044 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true) 045 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 046 * /> 047 * 048 * ●使用例 049 * <og:orderBy columns="PN,YOBI" checked="checked" /> 050 * <og:orderBy columns="YOBI,PN" /> 051 * <og:orderBy columns="MKNM,YOBI" /> 052 * 053 * @og.rev 3.1.4.0 (2003/04/18) 継承元を、CommonTagSupport に変更。 054 * @og.group 画面部品 055 * 056 * @version 4.0 057 * @author Kazuhiko Hasegawa 058 * @since JDK5.0, 059 */ 060public class OrderByTag extends CommonTagSupport { 061 //* このプログラムのVERSION文字列を設定します。 {@value} */ 062 private static final String VERSION = "5.2.2.0 (2010/11/01)" ; 063 064 private static final long serialVersionUID = 522020101101L ; 065 066 private String columns = null; 067 private String labels = null; 068 private String checked = null; 069 private String checkedValue = null; 070 071 /** 072 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 073 * 074 * @og.rev 3.1.4.1 (2003/04/21) HTMLTagSupport の継承を廃止した為、doEndTag() を追加。 075 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 076 * 077 * @return 後続処理の指示 078 */ 079 @Override 080 public int doEndTag() { 081 debugPrint(); // 4.0.0 (2005/02/28) 082 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応 083 if( useTag() ) { 084 jspPrint( makeTag() ); 085 } 086 return(EVAL_PAGE); 087 } 088 089 /** 090 * タグリブオブジェクトをリリースします。 091 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 092 * 093 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 094 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 095 * 096 */ 097 @Override 098 protected void release2() { 099 super.release2(); 100 columns = null; 101 labels = null; 102 checked = null; 103 checkedValue = null; 104 } 105 106 /** 107 * 検索条件の入力用のテキストフィールドを作成します。 108 * 109 * テーブルタグによりフィールドは分割されます。 110 * 使用時は、テーブルタグを前後に使用して下さい。 111 * 112 * @og.rev 3.1.1.0 (2003/03/28) radio ボタン等で、ラベルをクリックしても値をセットできるようにする。 113 * 114 * @return 入力用のテキストフィールドタグ 115 */ 116 protected String makeTag() { 117 set( "type","radio" ); 118 set( "name","ORDER_BY" ); 119 set( "value",columns ); 120 if( labels == null ) { setLbls( columns ); } 121 String lbls = getMsglbl(); 122 123 if( checkedValue != null && checkedValue.length() > 0 ) { 124 if( checkedValue.equals( columns ) ) { 125 set( "checked","checked" ); 126 } 127 } 128 else { 129 set( "checked",checked ); 130 } 131 132 if( get( "id" ) == null ) { set( "id",TaglibUtil.getTagId() ); } 133 134 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 135 136 rtn.append( "<td>" ); 137 rtn.append( XHTMLTag.input( getAttributes() ) ); 138 rtn.append( "</td>" ); 139 rtn.append( "<td>" ); 140 rtn.append( "<label for=\"" ); 141 rtn.append( get( "id" ) ); 142 rtn.append( "\">" ); 143 rtn.append( lbls ); 144 rtn.append( "</label>" ); 145 rtn.append( "</td>" ); 146 147 return rtn.toString() ; 148 } 149 150 /** 151 * 【TAG】表示順対象のカラムをCSV形式で複数指定します。 152 * 153 * @og.tag 表示順対象のカラムを指定します。 154 * 155 * @param columns カラム(CSV形式) 156 */ 157 public void setColumns( final String columns ) { 158 this.columns = getRequestParameter( columns ); 159 } 160 161 /** 162 * 【TAG】初めからチェックされた状態(checked)で表示します。 163 * 164 * @og.tag 165 * check 値が "checked" の場合のみ、実行されます。 166 * 167 * @param ch "checked" 値 168 */ 169 public void setChecked( final String ch ) { 170 checked = getRequestParameter( ch ); 171 if( "checked".equals( checked )) { 172 checked = "checked"; 173 } 174 else { 175 checked = null; 176 } 177 } 178 179 /** 180 * 【TAG】初めからチェックされた状態にする値を指定します。 181 * 182 * @og.tag 183 * チェックバリューが、自分自身のカラム名と同じであれば、チェックがつきます。 184 * 通常、checkedValue = "{@ORDER_BY}" で、自動的にチェックされます。 185 * 186 * @param ch チェックされた状態にする値 187 */ 188 public void setCheckedValue( final String ch ) { 189 checkedValue = nval( getRequestParameter( ch ),checkedValue ); 190 } 191 192 /** 193 * 【TAG】ラベルをCSV形式で複数指定します。 194 * 195 * @og.tag 196 * ラベル(複数)を変更するときに、lbls属性を使います。 197 * 198 * シングルラベルの lbl 属性との違いは,ここではラベルを複数 カンマ区切りで 199 * 渡すことが可能であることです。これにより、"A,B,C" という値に対して、 200 * "Aのラベル表示,Bのラベル表示,Cのラベル表示" という具合に文字列を 201 * 再合成します。 202 * これは、SQL文のOrder By 句で、ソート順を指定する場合などに便利です。 203 * 204 * @og.rev 3.5.6.2 (2004/07/05) 先に配列に分解してからリクエスト変数の値を取得 205 * @og.rev 5.2.2.0 (2010/11/01) setMsglbl 廃止 ⇒ setLbl に置換え 206 * 207 * @param lbls 複数ラベルID(カンマ区切り) 208 */ 209 public void setLbls( final String lbls ) { 210 labels = getRequestParameter( lbls ) ; 211 212 String[] array = getCSVParameter( lbls ); 213 214 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 215 buf.append( getLabel( array[0] ) ); 216 for( int i=1; i<array.length; i++ ) { 217 buf.append( "," ); 218 buf.append( getLabel( array[i] ) ); 219 } 220// setMsglbl( buf.toString() ); 221 setLbl( buf.toString() ); // 5.2.2.0 (2010/11/01) setMsglbl 廃止 ⇒ setLbl に置換え 222 } 223 224 /** 225 * このオブジェクトの文字列表現を返します。 226 * 基本的にデバッグ目的に使用します。 227 * 228 * @return このクラスの文字列表現 229 */ 230 @Override 231 public String toString() { 232 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 233 .println( "VERSION" ,VERSION ) 234 .println( "columns" ,columns ) 235 .println( "labels" ,labels ) 236 .println( "checked" ,checked ) 237 .println( "checkedValue" ,checkedValue ) 238 .println( "Other..." ,getAttributes().getAttribute() ) 239 .fixForm().toString() ; 240 } 241}