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 static org.opengion.fukurou.util.StringUtil.nval;
019
020import org.opengion.fukurou.util.XHTMLTag;
021import org.opengion.hayabusa.common.HybsSystem;
022import org.opengion.hayabusa.resource.GUIInfo;
023
024/**
025 * テキストフィールドの入力を補助するポップアップを作成します。
026 *
027 * 通常のテキストフィールドに組み込むケースと、一覧表に組み込むケースに対応しています。
028 * 基本的には、columnMarker タグと同じ使い方ですが、フィールドが書き込み許可時に表示させる必要が
029 * あるため、実際には、viewMarker の isRendere="false" で使用するケースが多いと思います。
030 * なお、ポップアップ専用なので href="index.jsp" target="CONTENTS" がデフォルトで設定されています。
031 *
032 * @og.formSample
033 * ●形式:<og:popup gamenId="…" href="…" keys="…,…" vals="…,…" rtnKeys="…,…" />
034 * ●body:なし
035 *
036 * ●Tag定義:
037 *   <og:popup
038 *       name               【TAG】この要素をリンクの対象とするための名前を指定します
039 *       gamenId            【TAG】画面ID属性を登録します
040 *       href               【TAG】ポップアップ先のURLを指定します(初期値:index.jsp)
041 *       keys               【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します
042 *       vals               【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します
043 *       rtnKeys            【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します
044 *       column             【TAG】リンクをつけたいカラムを指定します
045 *       onMark             【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)
046 *       markList           【TAG】処理するマークを、"|"区切りの文字列で指定します
047 *       height             【TAG】ダイアログの縦幅をピクセル数で指定します
048 *       width              【TAG】ダイアログの横幅をピクセル数で指定します
049 *       src                【TAG】表示させる画像のURLを指定します
050 *       charset            【TAG】ポップアップ先の文字コードセットを指定します
051 *       target             【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS)
052 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
053 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
054 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true)
055 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true)
056 *       id                 【HTML】要素に対して固有の名前(id)をつける場合に設定します
057 *       lang               【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します
058 *       dir                【HTML】文字表記の方向(dir)を指定します
059 *       title              【HTML】要素に対する補足的情報(title)を設定します
060 *       style              【HTML】この要素に対して適用させるスタイルシート(style)を設定します
061 *       tabindex           【HTML】タブの移動順(tabindex)を指定します(0 〜 32767)
062 *       accesskey          【HTML】アクセスキー(alt+キーで直接指定)を割り当てます
063 *       clazz              【HTML】要素に対して class 属性を設定します
064 *       lbl                【TAG】ラベルリソースのラベルIDを指定します
065 *       language           【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します
066 *       command            【TAG】(通常使いません)処理の実行を指定する command を設定できます(初期値:NEW)
067 *       append             【TAG】返ってきた値をキャレット位置に追記するかどうか(初期値:false)
068 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
069 *   />
070 *
071 * ●使用例
072 *    ・普通のポップアップ
073 *        <og:popup gamenId="GE0002" href="index.jsp" target="CONTENTS"
074 *                    keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC"
075 *                    rtnKeys="DDD,EEE" />
076 *
077 *    ・QUERYの入力フィールドに組み込む
078 *      @keys、vals、rtnKeys がセットされる場合
079 *          セットされる keys に対して vals の値をポップアップ画面に渡し、ポップアップ画面の戻り値を rtnKeys にセットされます。
080 *        <og:column name="AAA" value="{@AAA}" >
081 *            <og:popup gamenId="GE0002"
082 *                        keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC"
083 *                        rtnKeys="DDD,EEE" />
084 *        </og:column>
085 *      Akeys、vals、rtnKeys がセットされない場合
086 *           ポップアップ画面にリクエスト変数 XNAME に外側のカラム名、XVALUE にカラムの入力値、rtnKeys にカラム名を自動的にセットされます。
087 *        <og:column name="AAA" value="{@AAA}" >
088 *            <og:popup gamenId="GE0002" />
089 *        </og:column>
090 *
091 *    ・RESULTの入力フィールドに組み込む(viewMarker 経由)
092 *      gamenId を指定しなければこの画面へのURLを作成します。
093 *      このURLは、その画面の index.jsp に直接ジャンプするためのURLです。
094 *        <og:viewMarker command="{@command}" isRenderer="false">
095 *            <og:popup gamenId="GE0002" column="ABC" onMark="[ABC]" markList="1|2|3"
096 *                        keys="AAA,BBB,CCC" vals="[AAA],[BBB].value,{@CCC}"
097 *                        rtnKeys="DDD,EEE" />
098 *        </og:viewMarker>
099 *
100 *    ・ポップアップ側のJSPファイル(view 部分)
101 *
102 * @og.group 画面部品
103 * @og.rev 3.8.6.1 (2006/10/20) 新規作成
104 *
105 * @version  0.9.0      2000/10/17
106 * @author       Kazuhiko Hasegawa
107 * @since        JDK1.1,
108 */
109public class PopupTag extends HTMLTagSupport {
110        //* このプログラムのVERSION文字列を設定します。   {@value} */
111        private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
112
113        private static final long serialVersionUID = 522020101101L ;
114
115        private static final String DEF_BODY  = "▼" ;
116//      private static final String DEF_STYLE = "width:20px;text-align:center;" ;
117        private static final String DEF_STYLE = "width:20px;text-align:center;padding:0;" ; // 5.9.4.3 (2016/01/15) padding
118
119        private String          column          = null;
120        private String          gamenId         = null;
121        private String          href            = "index.jsp";
122        private String          target          = "CONTENTS";
123        private String          onMark          = "true";       // true または 1
124        private String          markList        = "true|TRUE|1";        // true または 1
125        private String          height          = null;
126        private String          width           = null;
127        private String          imgsrc          = null;
128        private String[]        keys            = null;
129        private String[]        vals            = null;
130        private String[]        rtnKeys         = null;
131
132        /** command 引数に渡す事の出来る コマンド  新規 {@value} */
133        private static final String CMD_NEW      = "NEW" ;              // 5.1.7.0 (2010/06/01)
134        private String          command         = CMD_NEW;                      // 5.1.7.0 (2010/06/01)
135        
136        private String          append          = "false";                      // 5.8.5.0 (2015/03/06)
137
138        /**
139         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
140         *
141         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
142         *
143         * @return      後続処理の指示
144         */
145        @Override
146        public int doEndTag() {
147                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
148                if( useTag() ) {
149                        makeGamenLink();
150
151                        // GAMENID属性のURLへの自動セットは行わない。
152                        ViewMarkerTag viewMark = (ViewMarkerTag)findAncestorWithClass( this,ViewMarkerTag.class );
153                        if( viewMark != null ) {
154                                set( "onMark"  ,onMark );
155                                set( "markList",markList );
156                                set( "body"    ,makePopup( true ) );
157
158                                if( column != null && column.length() > 0 ) {
159                                        set( "column"  ,column );       // 4.0.0 (2005/08/31) 同一カラムの複数登録を許可します。
160                                        viewMark.addAttribute( getAttributes() );
161                                }
162                        }
163                        else {
164                                if( markList.indexOf( onMark ) >= 0 ) {
165                                        jspPrint( makePopup( false ) );
166                                }
167                        }
168                }
169                return(EVAL_PAGE);
170        }
171
172        /**
173         * 使用しません。
174         *
175         * @return      (null 固定)
176         */
177        @Override
178        protected String makeTag() { return null; }
179
180        /**
181         * タグリブオブジェクトをリリースします。
182         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
183         *
184         */
185        @Override
186        protected void release2() {
187                super.release2();
188                column          = null;
189                gamenId         = null;
190                href            = "index.jsp";
191                target          = "CONTENTS";
192                onMark          = "true";                       // true または 1
193                markList        = "true|TRUE|1";        // true または 1
194                keys            = null;
195                vals            = null;
196                rtnKeys         = null;
197                height          = null;
198                width           = null;
199                imgsrc          = null;
200                command         = CMD_NEW;                      // 5.1.7.0 (2010/06/01)
201                append          = "false";                      // 5.8.5.0 (2015/03/66)
202        }
203
204        /**
205         * リンクを作成します。
206         *
207         * @og.rev 4.2.4.0 (2008/07/01) keys,vals,rtnKeysが設定されていない場合、外側のog:columnタグのname値を設定するように変更
208         * @og.rev 5.1.7.0 (2010/06/01) 引数にcommandを追加
209         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
210         * @og.rev 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。
211         * @og.rev 5.8.5.0 (2015/03/06) append追加
212         *
213         * @param       useKey [true:KEY付き/false:KEY無し]
214         *
215         * @return      リンクタグ文字列
216         */
217        private String makePopup( final boolean useKey ) {
218                StringBuilder rtn = new StringBuilder();
219//              rtn.append( "ogPopup( '" ).append( get( "href" ) ).append( "'," );
220//              rtn.append( height ).append( "," ).append( width ).append( "," );
221                // 5.2.1.0 (2010/10/01)  px を付けると数字ではなくなるため、シングルクオーテーションでくくる。
222                rtn.append( "ogPopup( '" ).append( get( "href" ) ).append( "'," );
223                // 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。
224                if( height != null ) { rtn.append( "'" ).append( height ).append( "'" ); }
225                else {                             rtn.append( "null" ); }
226                rtn.append( "," );
227                if( width != null ) {  rtn.append( "'" ).append( width ).append( "'" );  }
228                else {                             rtn.append( "null" ); }
229                rtn.append( "," );
230
231                String columnName = null; //4.2.4.0 2008/07/01
232                if( keys != null && keys.length > 0 ) {
233                        rtn.append( "new Array(" );
234                        addQuote( rtn, keys[0], false );
235                        rtn.append( "," );
236                        addQuote( rtn, vals[0], false );
237                        for( int i = 1; i < keys.length; i++ ) {
238                                rtn.append( "," );
239                                addQuote( rtn, keys[i], false );
240                                rtn.append( "," );
241                                addQuote( rtn, vals[i], false );
242                        }
243                        rtn.append( ")," );
244                }
245                else {
246                        ColumnTag outerColumn = (ColumnTag) findAncestorWithClass( this, ColumnTag.class );
247                        columnName = ( outerColumn == null ) ? null : outerColumn.getName();
248                        if( columnName != null ) {
249                                rtn.append( "new Array('XNAME','" );
250                                rtn.append( columnName );
251                                rtn.append( "','XVALUE'," );
252                                rtn.append( columnName );
253                                rtn.append( ".value" );
254                                rtn.append( ")," );
255                        }
256                        else {
257                                rtn.append( "null," );
258                        }
259                }
260                rtn.append( "" );
261
262                if( rtnKeys != null && rtnKeys.length > 0 ) {
263                        rtn.append( "this,new Array(" );
264                        addQuote( rtn, rtnKeys[0], useKey );
265                        for( int i = 1; i < rtnKeys.length; i++ ) {
266                                rtn.append( "," );
267                                addQuote( rtn, rtnKeys[i], useKey );
268                        }
269                        rtn.append( ")" );
270                }
271                else if( columnName != null ) {
272                        rtn.append( "this,new Array('" );
273                        rtn.append( columnName );
274                        rtn.append( "')" );
275                }
276                else {
277                        rtn.append( "null,null" );
278                }
279
280                // 5.1.7.0 (2010/06/01) 引数にcommandを追加
281                // 5.8.5.0 (2015/03/06) append追加
282//              rtn.append( ");" );
283//              rtn.append( ",'" ).append( command ).append( "');" );
284                rtn.append( ",'" ).append( command ).append( "'");
285                rtn.append( ",'" ).append( append ).append( "');" );
286
287                if( imgsrc == null ) {
288                        set( "type"   , "button" );
289                        set( "body"   , nval( getMsglbl(),DEF_BODY) );
290                        set( "onClick", rtn.toString() );
291                        set( "style"  , nval( get( "style" ),DEF_STYLE) );
292                        return XHTMLTag.button( getAttributes() ) ;
293                }
294                else {
295                        set( "src"    , imgsrc );
296                        set( "title"  , getMsglbl() );
297                        set( "onClick", rtn.toString() );
298                        set( "style"  , get( "style" ) );
299                        return XHTMLTag.img( getAttributes() ) ;
300                }
301        }
302
303        /**
304         * 引数 val の設定値を設定する簡易メソッド
305         *
306         * @param       buf             結果を格納するStringBuilderオブジェクト
307         * @param       val             設定値
308         * @param       useKey  [true:KEY付き/false:KEY無し]
309         *
310         * @return      (引数のバッファと同じオブジェクト)
311         */
312        private StringBuilder addQuote( final StringBuilder buf, final String val, final boolean useKey ) {
313                if( useKey ) {
314                        if( val != null && val.endsWith( ".value" ) ) {
315                                buf.append( val.substring( 0,val.length()-6 ) ).append( "__{I}.value" );
316                        }
317                        else {
318                                buf.append( "'" ).append( val ).append( "__{I}'" );
319                        }
320                }
321                else {
322                        if( val != null && val.endsWith( ".value" ) ) {
323                                if( val.charAt(0) == '[' ) {
324                                        buf.append( val.substring( 1,val.length()-7 ) ).append( "__{I}.value" );
325                                }
326                                else {
327                                        buf.append( val );
328                                }
329                        }
330                        else {
331                                buf.append( "'" ).append( val ).append( "'" );
332                        }
333                }
334                return buf ;
335        }
336
337        /**
338         * 画面IDとhref から、指定のURLを作成します。
339         */
340        private void makeGamenLink() {
341                if( gamenId == null || gamenId.length() == 0 ) { return ; }
342
343                GUIInfo guiInfo = getGUIInfo( gamenId );                // 4.0.0 (2005/01/31)
344                if( guiInfo == null ) { return ; }      // 見つからない場合は、アクセス不可
345
346                String address = guiInfo.getRealAddress( get( "href" ) );
347                String url = getRequestParameter( address );
348                set( "href",url );
349
350                if( get( "title" ) == null ) {
351                        set( "title","To:" + guiInfo.getLabel() );
352                }
353        }
354
355        /**
356         * 【TAG】この要素をリンクの対象とするための名前を指定します。
357         *
358         * @og.tag この要素をリンクの対象とするための名前を指定します。
359         *
360         * @param       name 名前
361         */
362        public void setName( final String name ) {
363                set( "name",getRequestParameter( name ) );
364        }
365
366        /**
367         * 【TAG】リンクをつけたいカラムを指定します。
368         *
369         * @og.tag
370         * このカラム名のTableModelに対して、 ViewLink タグが存在する場合は,
371         * リンクを張ります。
372         *
373         * @param       clm カラム名
374         */
375        public void setColumn( final String clm ) {
376                column = nval( getRequestParameter( clm ),column );
377        }
378
379        /**
380         * 【TAG】画面ID属性を登録します。
381         *
382         * @og.tag
383         * gamenId 属性は、画面IDをキーに、実アドレスを求めるのに使用します。
384         * 画面IDが指定された場合は、実アドレスに変換する。指定されない場合は、
385         * href 属性をそのままリンク情報を作成します。
386         * 画面IDを指定する場合の href は、JSPファイル名(例えば、index.jsp 等)です。
387         *
388         * @param       id      画面ID
389         */
390        public void setGamenId( final String id ) {
391                gamenId = nval( getRequestParameter( id ),gamenId );
392        }
393
394        /**
395         * 【TAG】ポップアップ先のURLを指定します(初期値:index.jsp)。
396         *
397         * @og.tag
398         * 通常、gamenId を指定している場合は、それ以降(index.jsp , result.jsp など)を指定します。
399         * 通常のリンクの場合、GAMENID/href というアドレスに合成されます。( GE0001/result.jsp など )
400         * (正確には、画面IDではなく、対応する画面ADDRESSを使用します。)
401         * ポップアップ専用のリンクなので、初期値は、index.jsp です。
402         *
403         * @param       href ポップアップ先のURL
404         */
405        public void setHref( final String href ) {
406                set( "href",nval( getRequestParameter( href ),this.href ) );
407        }
408
409        /**
410         * 【TAG】ポップアップ先の文字コードセットを指定します。
411         *
412         * @og.tag ポップアップ先の文字コードセットを指定します。
413         *
414         * @param       charset 文字コードセット
415         */
416        public void setCharset( final String charset ) {
417                set( "charset",getRequestParameter( charset ) );
418        }
419
420        /**
421         * 【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS)。
422         *
423         * @og.tag ポップアップ先の表示ターゲットを指定します。
424         *
425         * @param       target 表示ターゲット
426         */
427        public void setTarget( final String target ) {
428                set( "target",nval( getRequestParameter( target ),this.target ) );
429        }
430
431        /**
432         * 【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します。
433         *
434         * @og.tag ポップアップ先に渡す入力キー配列を指定します。
435         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
436         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
437         *
438         * @param       key 渡す入力キー配列(CSV形式)
439         */
440        public void setKeys( final String key ) {
441                keys = getCSVParameter( key );
442        }
443
444        /**
445         * 【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します。
446         *
447         * @og.tag ポップアップ先に渡す値配列を指定します。
448         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
449         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
450         *
451         * @param       val 渡す値配列(CSV形式)
452         */
453        public void setVals( final String val ) {
454                vals = getCSVParameter( val );
455        }
456
457        /**
458         * 【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します。
459         *
460         * @og.tag ポップアップ先より受け取るキー配列を指定します。
461         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
462         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
463         *
464         * @param       key 受け取るキー配列(CSV形式)
465         */
466        public void setRtnKeys( final String key ) {
467                rtnKeys = getCSVParameter( key );
468        }
469
470        /**
471         * 【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)。
472         *
473         * @og.tag
474         * リンクを張る場合は、"true"(または "1") リンクを張らない
475         * 場合は, "true以外"(または "0")をセットします。
476         * 初期値は、 "true"(リンクを張る)です。
477         * さらに、[カラム名] で、動的にカラムの値で、リンクを張る、張らないを
478         * 選ぶ事が可能になります。値は、"true"(または "1") で、マークします。
479         * ただし、単独 linkタグ時は使用できません。
480         * 追記 3.5.2.0 (2003/10/20):markList属性に、処理対象文字列郡を指定できます。
481         * これにより、リンクを処理するかどうかの判断が、true,1 以外にも使用できるようになりました。
482         *
483         * @param       flag リンクの設定[true:リンクを張る/それ以外:リンクを張らない]
484         */
485        public void setOnMark( final String flag ) {
486                onMark = nval( getRequestParameter( flag ),onMark );
487        }
488
489        /**
490         * 【TAG】処理するマークを、"|"区切りの文字列で指定します。
491         *
492         * @og.tag
493         * markListで与えられた文字列に、onMark文字列(大文字/小文字の区別あり)が
494         * 含まれていれば、処理します。
495         * 例えば、"A","B","C" という文字列が、onMark で指定された
496         * 場合に処理するようにしたい場合は、"A|B|C" をセットします。
497         * markList には、[カラム名]指定が可能です。(ただし、単独 linkタグ時は除く)
498         * 初期値は、 "true|TRUE|1"です。
499         *
500         * @param       list 処理するマーク(indexOf による含む/含まない判定)
501         */
502        public void setMarkList( final String list ) {
503                markList = nval( getRequestParameter( list ),markList );
504        }
505
506        /**
507         * 【TAG】ダイアログの縦幅をピクセル数で指定します。
508         *
509         * @og.tag
510         * 縦幅を指定します。単位も含めて入力してください。
511         * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。
512         *
513         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
514         *
515         * @param   ht ダイアログの縦幅(ピクセル数)
516         */
517        public void setHeight( final String ht ) {
518                height = nval( getRequestParameter( ht ),height );
519                if( height != null && ! height.endsWith( "px" ) ) { height += "px"; }   // 5.2.1.0 (2010/10/01)
520        }
521
522        /**
523         * 【TAG】ダイアログの横幅をピクセル数で指定します。
524         *
525         * @og.tag
526         * 横幅を指定します。単位も含めて入力してください。
527         * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。
528         *
529         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
530         *
531         * @param   wh ダイアログの横幅(ピクセル数)
532         */
533        public void setWidth( final String wh ) {
534                width = nval( getRequestParameter( wh ),width );
535                if( width != null && ! width.endsWith( "px" ) ) { width += "px"; }      // 5.2.1.0 (2010/10/01)
536        }
537
538        /**
539         * 【TAG】表示させる画像のURLを指定します。
540         *
541         * @og.tag
542         * この属性を設定すると、自動的に イメージリンクでの onClick属性で
543         * ポップアップの起動画面を作成します。
544         * この属性が設定されていない場合は、button での起動になります。
545         *
546         * @param   src 画像のURL
547         */
548        public void setSrc( final String src ) {
549                imgsrc = nval( getRequestParameter( src ),imgsrc );
550        }
551
552        /**
553         * 【TAG】(通常使いません)処理の実行を指定する command を設定できます(初期値:NEW)。
554         *
555         * @og.tag
556         * ここで指定されたcommandは、ポップアップ画面の引数として渡されます。
557         * 初期値は、NEW です。
558         *
559         * @og.rev 5.1.7.0 (2010/06/01) 新規作成
560         *
561         * @param       cmd コマンド
562         */
563        public void setCommand( final String cmd ) {
564                command = nval( getRequestParameter( cmd ),command );
565        }
566        
567        /**
568         * 【TAG】返り値をキャレット位置に追記する(true)/しない(false)の設定を指定します(初期値:false)。
569         *
570         * @og.tag
571         * ポップアップからの返り値を、元の値と置換するのではなく、キャレット位置に挿入するかどうかを指定します。
572         * 
573         * @og.rev 5.8.5.0 (2015/02/06)
574         *
575         * @param       flg 返り値のキャレット位置に追記設[true:追記/それ以外:置換]
576         */
577        public void setAppend( final String flg ) {
578                append = nval( getRequestParameter( flg ),append );
579        }
580
581        /**
582         * このオブジェクトの文字列表現を返します。
583         * 基本的にデバッグ目的に使用します。
584         *
585         * @return このクラスの文字列表現
586         */
587        @Override
588        public String toString() {
589                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
590                                .println( "VERSION"             ,VERSION        )
591                                .println( "column"              ,column         )
592                                .println( "gamenId"             ,gamenId        )
593                                .println( "href"                ,href           )
594                                .println( "target"              ,target         )
595                                .println( "onMark"              ,onMark         )
596                                .println( "markList"    ,markList       )
597                                .println( "height"              ,height         )
598                                .println( "width"               ,width          )
599                                .println( "keys"                ,keys           )
600                                .println( "vals"                ,vals           )
601                                .println( "rtnKeys"             ,rtnKeys        )
602                                .println( "Other..."    ,getAttributes().getAttribute() )
603                                .fixForm().toString()
604                        + HybsSystem.CR
605                        + super.toString() ;
606        }
607}