---------------------------------------------------------------------------------
                                                                      2010/05/21
                  Web Application Framework pirka V1.06

                       Oriental Arts CO.LTD  (http://www.oarts.jp)
---------------------------------------------------------------------------------

    Web Application Framework pirka（以降pirkaと記す）はJavaサーブレットベースの
    Webアプリケーションを作成および動作するためのフレームワークです。
    容易な習得および生産性向上を目的としたフレームワークであり、以下の特徴を有します。

    1) 最小構成のWebアプリケーションは1つのHTMLファイルと1つのJavaクラスのみで動作
    2) 作成するJavaソースコードはサーブレットを意識しないシンプルなJavaクラス
    3) Convention over configuration（設定より規約）を目指し最小限の設定ファイル＆ソース記述で動作

    ※pirka：ピリカ と読みます。「良い、美しい」という意味のアイヌ語からとりました。

    --- 目次 -------------------------------------------------------------------------------------
    
    1.概要
    2.主な機能
    3.仕様
        3.1 エントリーポイント
            3.1.1 基本
            3.1.2 web.xml
            3.1.3 イメージファイル等の配置
        3.2 Web画面
            3.2.1 構成
            3.2.2 HTMLファイルの基本
                1) 名前(name属性)を付ける
                2) 動的表示（可変表示）
                3) テキストボックスやテキストエリア等のコントローラーへの値の表示
                4) テキストボックスやテキストエリア等のコントローラーからの入力値の取得
                5) ループ（繰り返し）
                6) スイッチ
                7) エラーメッセージ表示領域
            3.2.3 ウインドクラス（Java）の基本
                1) 戻り型がvoidのアクションメソッド
                2) 戻り型がpirkaWindのアクションメソッド
                3) 戻り型がpirkaFileDownloaderのアクションメソッド
                4) public void onPre(); 又は public pirkaWindow onPre();
                5) public void onElse();　又は　public pirkaWindow onElse();
                6) public void preDraw();　又は　public pirkaWindow preDraw();
            3.2.4 詳細
                1) <SPAN name="名称"></SPAN>
                2) <DIV name="名称"></DIV>
                3) <SCRIPT name="名称"></SCRIPT>
                4) <FORM name="名称"></FORM>
                5) <TEXTAREA name="名称"></TEXTAREA>
                6) <INPUT TYPE="TEXT" name="名称" value="値">
                7) <INPUT TYPE="PASSWORD" name="名称" value="値">
                8) <INPUT TYPE="HIDDEN" name="名称" value="値">
                9) <INPUT TYPE="RADIO" name="名称" value="値">
                10) <INPUT TYPE="CHECKBOX" name="名称">
                11) <INPUT TYPE="FILE" name="名称" value="値">
                12) <INPUT TYPE="SUBMIT" name="名称" value="値">
                13) <INPUT TYPE="IMAGE" name="名称">
                14) <BUTTON TYPE="SUBMIT" name="名称"></BUTTON>
                15) <SELECT name="名称"></SELECT>
                16) <IMG name="名称">
                17) <A name="名称">
                18) <LABEL name="名称">
            3.2.5 データーメソッド
                1) pirkaWindowに実装されているメソッド
                    1-1) フィールドマップの取得
                    1-2) フィールドマップの新規作成
                    1-3) ループ中のデフォルトフィールドマップの取得
                    1-4）DTOオブジェクトを取得
                    1-5) DTOオブジェクトの設定
                    1-6) Beanオブジェクトへのデータ設定
                    1-7) Listオブジェクトの取得
                    1-8) Beanオブジェクトの反映
                    1-9) Listオブジェクトの反映
                    1-10) イベントのループインデックスの取得
                2) FieldMapに実装されているメソッド
                    2-1) 1フィールドへのデータの設定
                    2-2) 1フィールドからのデータの取得
                    2-3) ループへのデータ設定
                    2-4) ループからのデータ取得
                    2-5) 全データを空にする
            3.2.6 コントロールメソッド
                1) pirkaWindowに実装されているメソッド
                    1-1) 入力データチェック用メソッド
                        1-1-1) チェッカー登録・削除
                        1-1-2) チェッカー
                        1-1-3) チェック＆テラー
                        1-1-4) チェック
                        1-1-5) エラー数の取得
                    1-2) エラーメッセージ登録
                    1-3) エラーメッセージマネージャーの登録
                2) FieldMapに実装されているメソッド
                    2-1) タグ属性
                    2-2) 一覧情報
                    2-3) 表示フォーマット
                    2-4) エラー設定
                    2-5) Web特殊文字自動変換機能のON/OFF
                    2-6) タグ効果の指定
                    2-7) グループレベルの指定
                    2-8) ID属性、for属性サフィックス付加指定
                    2-9) イメージオブジェクトの設定
                    2-10) 自動チェック実行設定
                    2-11) 正式なフィールド名の設定
                    2-12) Ajaxの設定
                    2-13) リンクのサブミット設定
            3.2.7 モックアップ機能
            3.2.8 インクルード機能
            3.2.9 別ウィンドウのインスタンス管理
            3.2.10 Ajax
            3.2.11 セション
    4.その他
        4.1 ログ出力
        4.2 Javascript使用時の注意事項
        4.3 旧サーブレットモード
        4.4 JUnitテスト
        4.5 制限事項

    ----------------------------------------------------------------------------------------------

    1.概要

        　pirkaはTomcat等のJavaサーブレットベースのWebサーバー上で動作するWebアプリケーション用の
        フレームワークです。

        pirkaを使用したwebアプリケーションが動作するために必要なものは、Tomcat等のWebサーバーと、
        Pirka.jar・HTML・HTMLに対応するJavaクラスの3つだけです。
        (Webサーバーを動作させるための環境設定などは除きます)

        Pirka.jar には、pirkaの全ての機能が格納されています。
        HTMLファイルとJavaファイルは対になっており、画面の表示と制御を行うものです。

        pirkaでは、1つのWeb画面は1つのHTMLファイルとそのHTMLファイルに対応するJavaクラスファイル(ウィ
        ンドウクラスと呼びます)で構成されます。
        基本的には画面数と同じ数だけのHTMLファイルと、そのHTMLファイルに対応するJavaクラスファイルを
        作成します。

        ただし、１つHTMLファイルに複数のJavaクラス対応させて似通った見た目を持つ複数の違うWeb画面を
        作成することや、複数のHTMLファイルと1つのJavaクラスを対応させ動作は同じでも見た目が違うWeb画
        面を作成することも可能です。

        複数のエントリーポイント（URL）を必要とするWebアプリケーションのときはエントリーポイントクラ
        スを派生させたクラスを独自に作成することにより可能となります。

        また、作成したHTMLファイルと作成したJavaソースファイルをコンパイルしたクラスファイルはWebア
        プリケーソンサーバー上のwebappsフォルダー内の任意名前を持つWebアプリケーションフォルダーに配
        置されWebアプリケーションとして動作します。

          ・Webサーバー
               |-webapps
                   |-任意のフォルダー
                         |-Web-INF
                         |　　|-classes
                         |    |  |-作成したHTMLファイル
                         |    |  |-作成したJavaファイル
                         |    |
                         |    |-lib
                         |       |-Pirka.jar
                         |
                         |-web.xml


    2.主な機能

        ・動的なWeb画面（HTMLイメージ）の表示（動的に作成されるグラフィックもサポート）
        ・ブラウザーからのアクションに応じたJavaメソッドの呼び出し
        ・ブラウザーで入力された情報の受け渡し（DTO、Beanの一括受け渡し・受け取りサポート）
        ・ブラウザーで入力された値の自動チェック
        ・ファイルダウンロード
        ・ファイルアップロード
        ・フェータルエラー画面の自動表示
        ・セションタイムアウトエラー画面の自動表示
        ・HTMLファイル内での繰り返し（一覧表など）処理のサポート
        ・モックアップサポート
        ・HTMLファイルのインクルード
        ・Google App Engine対応
        


    3.仕様

        3.1 エントリーポイント

            エントリーポイントとは、ブラウザでWebサーバーを呼び出すときに使用されるURLです。
            
            3.1.1 基本

                pirkaに付属しているweb.xmlを使用すれば通常エントリーポイントを作成する
                必要はありません。
                初期画面としてclassesの直下に存在するIndex.htmlとIndex.classを使用しますので、
                そのファイル（Index.html、Index.class）を作成してください。
                Indexクラスには、パブリックなパラメータ無しのコンストラクタでnewできるようにしてください。

                このとき、ブラウザーで指定するURLは『http://server-adrs/appName/index』となります。
                server-adrsはWebサーバーのIPアドレス、appNameはWebサーバーにインストール（デプロイ）した
                時のWebアプリケーション名（webappsの下のインストールしたフォルダー名）です。

                また、以下のことを行ないたい時は独自のエントリーポイントを作成することにより実現可能です。
                詳細はAPIマニュアルを参照してください。

                　・1つのWebアプリケーションで複数のURLを持ちたい
                　・pirkaが標準で出力するフェータルエラー画面やセションタイムアウト画面を独自のWeb画面
                　　に置き換えたい
                　・URLに付加されたパラメータを取得して、その値によって初期画面や表示内容を変えたい
                　・メッセージENUMクラスを登録し画面上に表示されるエラーメッセージの一元管理を行ないたい
                　・HTMLファイル上のタグに対応する制御を独自に制御したい
                  ・Webサーバーから取得されるリクエストの文字コード変換を独自に行いたい（GAE対応）
                  ・アップロード処理等で使用されるテンポラリファイルの管理方式を独自で行いたい（GAE対応）
                  ・文字化け対策としてWEB画面から入力された文字列やWEB画面のコントロールや動的部に
                  　出力する文字列の任意の文字を常に変換したい
                　・他のWEBアプリケーション等からセションデータを引き継いで初画面を表示したい
                　　（3.2.11 セション参照）

                エントリーポイントは jp.oarts.pirka.core.app.EntryPoint クラスから派生させて作成します。
                派生したクラスに必要な処理を実装し、web.xmlにサーブレットとして登録することにより動作し
                ます。
                最低限実装しなければいけない処理としてはgetInitWindowメソッドをオーバーライドする
                ことです。
                そのメソッドでブラウザーから呼び出された最初の時に表示するウインドウオブジェクト
                （PorkaWindowの派生クラスのオブジェクト）を戻してください。
                これにより、初画面を指定することができます。


            3.1.2 web.xml

                web.xmlにエントリーポイントを登録するときは以下のことに注意してください。
    
                1) 登録するタグはservletタグと、servlet-mappingタグです。

                2) servletタグは以下の様に記述します。

                        <servlet>
                            <servlet-name>【サーブレット名】</servlet-name>
                            <servlet-class>【エントリーポイントクラス名】</servlet-class>
                        </servlet>

                    【サーブレット名】は他のサーブレット名とダブらない任意の名前を指定します。
                    【エントリーポイントクラス名】はjp.oarts.pirka.core.app.EntryPointクラスから
                    派生させて作成したクラスをパッケージを含むクラス名で指定します。

                    例）サーブレト名=SampleApp、エントリーポイントクラス名=abc.efg.SampleEntryPoint

                        <servlet>
                            <servlet-name>SampleApp</servlet-name>
                            <servlet-class>abc.efg.SampleEntryPoint</servlet-class>
                        </servlet>

                3) servlet-mappingタグは以下の様に記述します。

                        <servlet-mapping>
                            <servlet-name>【サーブレット名】</servlet-name>
                            <url-pattern>【URLパターン】</url-pattern>
                        </servlet-mapping>

                    【サーブレット名】はservletタグで指定したサーブレット名を指定します。
                    【URLパターン】はWEB画面を開く時にブラウザーで指定する任意のURLを指定します。
                    実際に指定するのはWebアプリケーション名より右側のパターン（名前）です。
                    
                    例）サーブレト名=SampleApp、URLをhttp://address/sample/start/abcと
                        したい時(addrssはサーバーの名前又はIPアドレス、sampleはWebアプリ
                        ケーション名)

                        <servlet-mapping>
                            <servlet-name>SampleApp</servlet-name>
                            <url-pattern>/start/abc</url-pattern>
                        </servlet-mapping>

                    注意：url-patternに/の1文字の指定はお勧めできません。
                          イメージファイルやcssファイルなどが全て使用できなくなる恐れがあります。


            3.1.3 イメージファイル等の配置
            
                    イメージファイル、cssファイル、jsファイル等をwebappsの下のWebアプリケーション
                    フォルダーに配置する時は以下のことに注意してください。
                    
                    URLをhttp://address/sample/start/abcとしたときにHTMLファイル内で指定する
                    src属性やhref属性は以下の様に扱われます。
                    
                    1) 同一サーバー内の絶対指定
                       先頭が/で始まるときはhttp://address/として扱われます。
                       そのためwebappsの下のWebアプリケーションフォルダーの下のimg/sample.gifを使用するときは
                       src="/sample/img/sample.gif"と指定します。
                       この場合事前にwebアプリケーション名が決まっている必要があます。
                       そのため途中でWEBアプリケーション名の変更する必要があるときには
                       HTML内の全てのパスの書き換えが必要となるためご注意ください。
                       次に説明する同一サーバー内の相対指定の使用をお勧めします。
                       
                    2) 同一サーバー内の相対指定
                       たとえばHTMLファイル中で src="sample.gif" と指定するとwebappsの下の
                       Webアプリケーションフォルダーの下の start/sample.gif が指定されたと
                       みなされます。

                       また1)と同様なwebappsの下のWebアプリケーションフォルダーの下のimg/sample.gifを
                       使用するときはstart/からの相対パスとして src="../img/sample.gif" と指定します。


        3.2 Web画面

            3.2.1 構成

                Web画面はHTMLファイルおよびHTMLファイルと同名のJavaで記述されたウィンドウクラスのオ
                ブジェクトから構成され動作します。
                HTMLファイルの拡張子は『.html』です。
                例えば、HTMLファイルの名前が『Menu.html』の場合、ウィンドウクラスのソースファイル名は
                『Menu.java』となります。

                また、HTMLファイルはウィンドウクラスと同じパッケージに格納してください。
                ウィンドウクラスのパッケージが『jp.oarts.view』の場合、HTMLファイルの格納場所は
                Web-INF/classes/jp/oarts/view の下になります。

                ※Eclipse + TomcatPlugin 等で開発する時は、ソースファイルの格納されているパッケージ上
                でHTMLファイルを作成すると自動的に Web-INF/classes の下にHTMLファイルがコピーされるの
                で効率良く開発することができます。


            3.2.2 HTMLファイルの基本

                HTMLファイルは一般的なHTMLファイルとほぼ同じものですが、pirkaの規約に則った記述が必要
                となります。

                以下にpirka固有の基本的な規約を記します。

                1) 名前(name属性)を付ける

                    ウィンドウクラスはHTMLファイル中のname属性（nameオプション）を持つ全ての種類のタ
                    グにアクセス可能です。
                    ウィンドウクラスからはname属性に記述された名前で値の設定、値の取得、属性の設定、
                    アクションメソッド呼び出しやその他制御を行うことができます。

                    ===  例  ===
                    <input type="text" name="text001">                  ○制御可能
                    <input type="submit" name="reg01" value="登録01">   ○制御可能
                    <input type="submit" value="登録01">                ×制御不可能(nameが無い)
                    <span name="message"></span>                        ○制御不可能
                    <span></span>                                       ×制御不可能(nameが無い)
                    <tabele name="table_a">                             ○制御可能


                    1つのHTMLファイル内で同じ名前を使用してはいけません。
                    ラジオボタン以外のタグのname属性に記述できる名前は英字から始まり英数字およびアン
                    ダーバーで構成してください。

                    ===  例  ===
                    <input type="text" name="text001">                  ○
                    <input type="text" name="text_001">                 ○
                    <input type="text" name="_text_001">                ×(先頭のアンダーバーはNG)
                    <input type="text" name="text@001">                 ×(記号はNG)
                    <input type="text" name="textあいう">               ×(マルチバイト文字はNG)

                    また、ラジオボタンをグループ化するには、名前の後に$から始まり英数字およびアンダー
                    バーで構成されるサフィックスを付加します。

                    ===  例  ===
                    <input type="radio" name="r001$a01">
                    <input type="radio" name="r001$a02">


                2) 動的表示（可変表示）

                    Web画面中で動的（可変）に表示を行ないたい箇所には<span>タグを使用します。
                    ウィンドウクラスでは名前と値を指定して<span name="xxx">〜</span>までの間に文字列
                    を埋め込み表示します。
                    文字列の設定にはsetValueメソッドを使用します。詳細はウインドクラスの基本を参照し
                    てください。

                    --- HTMLファイル ------------------------------------------
                    私は<span name="myName"></span>です。
                    -----------------------------------------------------------

                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    field.setValue("myName", "伊藤");
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    私は伊藤です。
                    -----------------------------------------------------------


                3) テキストボックスやテキストエリア等のコントローラーへの値の表示

                    通常のHTMLのタグと同じです。
                    ウィンドウクラスでは<span>タグと同様に名前と表示する値を設定します。

                    --- HTMLファイル ------------------------------------------
                    <form name="sampleForm" method="post">
                        住所:<input type="text" name="adrs">
                    </form>
                    -----------------------------------------------------------

                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    field.setValue("adrs", "神奈川県");
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    住所:[神奈川県            ]
                    -----------------------------------------------------------


                4) テキストボックスやテキストエリア等のコントローラーからの入力値の取得

                    通常のHTMLのタグと同じです。
                    ただし、入力された値をブラウザーがWebサーバーに送信する必要があるので必ずname属性
                    を付加した<form>タグで囲ってください。
                    ウィンドウクラスでは表示と同様に名前を指定して入力された値を取得します。


                    --- ブラウザで入力 ----------------------------------------
                    住所:[神奈川県横浜市      ]
                    -----------------------------------------------------------

                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    String adrs = field.geValueString("adrs");  //  adrsに"神奈川県横浜市"が格納される
                    -----------------------------------------------------------


                5) ループ（繰り返し）

                    一覧表の様に、HTMLファイル中の任意の範囲を繰り返したい場合には
                    <div type="loop"></div>タグを使用します。
                    ウィンドウクラスで複数のデータをセットすることによりHTMLファイル上で繰り返されま
                    す。

                    --- HTMLファイル ------------------------------------------
                    <form name="sampleForm" method="post">
                        <div type="loop" name="loop01">
                            <span name="msg"></span><input type="text name="ans">です。
                            <span name="result"></span>
                        </div>
                    </form>
                    -----------------------------------------------------------

                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    for(i=1;i<=3;i++){
                        FieldMap newFieldMap = createLoopFieldMap("loop01");
                        newFieldMap.setValue("msg", "☆ " + i + "x" + i + "=");
                        newFieldMap.setValue("ans", "");
                        newFieldMap.setValue("result", "");
                        field.addFieldMap("loop01", newFieldMap);
                    }
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    ☆ 1x1=[   ]です。
                    ☆ 2x2=[   ]です。
                    ☆ 3x3=[   ]です。
                    -----------------------------------------------------------

                    また、ループ中の入力エリアに入力された値の取得も可能です。

                    --- ブラウザ入力 ------------------------------------------
                    ☆ 1x1=[2  ]です。
                    ☆ 2x2=[   ]です。
                    ☆ 3x3=[9  ]です。
                    -----------------------------------------------------------

                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    for(i=0;i<3;i++){
                        FieldMap ansFieldMap = field.getFieldMap("loop01", i);
                        Integer ans = ansFieldMap.getValueIntObject("ans");
                        if(ans == null || ans != ((i+1)*(i+1)) ){
                            newFieldMap.setValue("result", "×");
                        }else{
                            newFieldMap.setValue("result", "○");
                        }
                    }
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    ☆ 1x1=[2  ]です。×
                    ☆ 2x2=[   ]です。×
                    ☆ 3x3=[9  ]です。○
                    -----------------------------------------------------------


                6) スイッチ

                    HTMLファイル中の任意の範囲の表示／非表示を行なうときには<div type="switch"></div>
                    タグを使用します。
                    ウィンドウクラスでboolean値を設定することにより表示／非表示が可能となります。

                    --- HTMLファイル ------------------------------------------
                    <form name="sampleForm" method="post">
                        名前：<input type="text" name="name">
                        <div type="switch" name="switch01">
                            住所：<input type="text" name="adrs">
                        </div>
                        電話：<input type="text" name="tel">
                    </form>

                    -----------------------------------------------------------

                    【表示】
                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    field.setValue("switch01", true);
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    名前：[              ]
                    住所：[              ]
                    電話：[              ]
                    -----------------------------------------------------------

                    【非表示】
                    --- Java --------------------------------------------------
                    FieldMap field = getFieldMap();
                    field.setValue("switch01", false);
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    名前：[              ]
                    電話：[              ]
                    -----------------------------------------------------------


                7) エラーメッセージ表示領域

                    name属性が"errorMessage"の<span>タグの領域が存在するときはpirkaにより自動的に入
                    力チェックで発生したエラーメッセージが表示されます。
                    また、エラーチェックでエラーとなったフィールドの背景色は赤くなります。
                    そのフィールドのID属性で指定されたID値と同じID値のfor属性を持つ<LABEL>タグ、
                    <SPAN>タグもエラー強調されます。
                    これらのエラースタイルはsetErrorMessageManagerメソッドで変更可能です。


            3.2.3 ウインドクラス（Java）の基本

                ウインドクラスは jp.oarts.pirka.core.win.pirkaWindow を派生させて作成します。
                最低限の構成としてはこれでOKです。
                （ただし、静的な画面が表示されるだけで何も動作しません）

                通常のWEBアプリケーションではデータはセション等に保管します。
                しかしpirkaではウインドウクラスのメンバ変数は自動的にセションに保存・取得されるため
                セションを意識せずにWEBアプリケーションを作成することが可能です。
                
                ある画面から次に表示する画面へのデータの受け渡しもセション経由ではなくnewした次画面の
                ウインドウオブジェクトのデータ受け渡しメソッドを呼び出すことにより行えます。
                もちろん、セションにデータを保管することも可能です。（3.2.11 セション参照）
                
                初期化が必要な時はコンストラクタを作成しそこに処理を記述します。
                エラーチェッカーの登録（後述）や画面に表示する初期値の設定などは、ここで行うと良いで
                しょう。
                
                サブミットボタンがクリックされたときは、クリックされたタグのname属性と同名のメソッド
                （アクションメソッド）が呼び出されます。
                同名のメソッドが無ければ、なにも起こりません。
                メソッド内でそのアクションに対応する処理を記述します。

                このメソッドは引数を持ちません。
                また、メソッドの戻り型としては void 、pirkaRespons（jp.oarts.pirka.core.res.pirkaRespons）
                の派生クラスの何れかが使用できます。
                通常よく使用されるのが pirkaRespons の派生クラスである pirkaWindow クラスです。
                またファイルダウンロード時などは pirkaFileDownloader 等も使用されます。

                1) 戻り型がvoidのアクションメソッド
                    戻り型がvoidのときはアクションメソッドの処理後、再度自画面（自ウィンドウオブジェクト）
                    の内容がブラウザーに表示されます。

                    --- HTMLファイル(Abc.html) --------------------------------
                    画面Abc<br>
                    <form name="sampleForm" method="post">
                        メッセージ：<input type="text" name="msg"><br>
                        <input type="submit" name="submitButton" value="実行">
                    </form>
                    -----------------------------------------------------------

                    --- Java（Abc.java） --------------------------------------
                    public class Abc extends pirkaWindow {
                        public void submitButton() {
                            FieldMap field = getFieldMap();
                            String message = field.getValueString("msg");
                            field.setValue("msg", message + "かきくけこ")
                        }
                    }
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[                         ]
                    [実行]
                    -----------------------------------------------------------

                    メッセージに"あいうえお"を入力する。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[あいうえお               ]
                    [実行]
                    -----------------------------------------------------------

                    実行ボタンをクリックする。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[あいうえおかきくけこ     ]
                    [実行]
                    -----------------------------------------------------------


                2) 戻り型がpirkaWindのアクションメソッド
                    戻り型が    pirkaWind のときは戻された pirkaWind オブジェクトの内容が
                    ブラウザーに表示（画面遷移）されます。

                    --- HTMLファイル(Abc.html) --------------------------------
                    画面Abc<br>
                    <form name="sampleForm" method="post">
                        メッセージ：<input type="text" name="msg"><br>
                        <input type="submit" name="nextWindow" value="次画面">
                    </form>
                    -----------------------------------------------------------

                    --- HTMLファイル(Xyz.html) --------------------------------
                    画面Xyz<br>
                    <form name="sampleForm" method="post">
                        <span name="msg2"></span><br>
                        <input type="submit" name="returnWindow" value="戻る">
                    </form>
                    -----------------------------------------------------------

                    --- Java（Abc.java） --------------------------------------
                    public class Abc extends pirkaWindow {
                        public pirkaWindow nextWindow() {
                            FieldMap field = getFieldMap();
                            //  画面から入力された文字列を取得
                            String mesage = field.getValueString("msg");
                            //  文字列を次画面にコンストラクタで渡す
                            return new Xyz(message);
                        }
                    }
                    -----------------------------------------------------------

                    --- Java（Xyz.java） --------------------------------------
                    public class Xyz extends pirkaWindow {
                        public Xyz(String message){
                            FieldMap field = getFieldMap();
                            //  コンストラクタで渡された文字列を表示
                            field.setValue("msg2", message);
                        }
                        public pirkaWindow returnWindow() {
                            //  画面Abcへ戻る
                            return new Abc();
                        }
                    }
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[               ]
                    [次画面]
                    -----------------------------------------------------------

                    ・メッセージにあいうえおを入力する。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[あいうえお     ]
                    [次画面]
                    -----------------------------------------------------------

                    ・次画面ボタンをクリックする。

                    --- ブラウザ表示 ------------------------------------------
                    画面Xyz
                    あいえお
                    [戻る]
                    -----------------------------------------------------------

                    ・戻るボタンをクリックする。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[               ]
                    [次画面]
                    -----------------------------------------------------------

                    【注意】
                    このとき画面Abcは表示されましたが、最初に入力された『あいうえお』の文字列は表示
                    されていません。
                    これは画面Xyzから画面Abcへ戻るときに新たにAbcクラスをnewしてそのオブジェクトを戻
                    したからです。

                    pirkaではWeb画面とウィンドウオブジェクトは同一のものとして扱われます。
                    画面Xyzで戻るボタンをクリックしたときに最初の呼び出しもとの画面Abcのオブジェクト
                    を戻せば『あいうえお』は表示されます。
                    以下に例を示します。

                    --- Java（Abc.java） --------------------------------------
                    public class Abc extends pirkaWindow {
                        public pirkaWindow nextWindow() {
                            FieldMap field = getFieldMap();
                            //  画面から入力された文字列を取得
                            String mesage = field.getValueString("msg");
                            //  文字列と自オブジェクトを次画面にコンストラクタで渡す
                            return new Xyz(message, this);
                        }
                    }
                    -----------------------------------------------------------

                    --- Java（Xyz.java） --------------------------------------
                    public class Xyz extends pirkaWindow {
                        private pirkaWindow returnObj;
                        public Xyz(String message, pirkaWindow returnWindowObject){
                            returnObj = returnWindowObject;
                            FieldMap field = getFieldMap();
                            //  コンストラクタで渡された文字列を表示
                            field.setValue("msg2", message);
                        }
                        public pirkaWindow returnWindow() {
                            //  コンストラクタで渡されたウィンドウオブジェクトを戻す
                            return returnObj;
                        }
                    }
                    -----------------------------------------------------------

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[               ]
                    [次画面]
                    -----------------------------------------------------------

                    ・メッセージにあいうえおを入力する。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[あいうえお     ]
                    [次画面]
                    -----------------------------------------------------------

                    ・次画面ボタンをクリックする。

                    --- ブラウザ表示 ------------------------------------------
                    画面Xyz
                    あいえお
                    [戻る]
                    -----------------------------------------------------------

                    ・戻るボタンをクリックする。

                    --- ブラウザ表示 ------------------------------------------
                    画面Abc
                    メッセージ：[あいうえお     ]
                    [次画面]
                    -----------------------------------------------------------

                   また、アクションメソッドがnullを戻すと、現在表示されているWeb画面を呼び出したWeb
                   画面のオブジェクトが指定されたとみなされブラウザに表示されます。
                   これは戻るボタンなどに有効です。

                    上記サンプルソースは以下の様に書き換え可能です。

                    --- Java（Abc.java） --------------------------------------
                    public class Abc extends pirkaWindow {
                        public pirkaWindow nextWindow() {
                            FieldMap field = getFieldMap();
                            //  画面から入力された文字列を取得
                            String mesage = field.getValueString("msg");
                            //  文字列を次画面にコンストラクタで渡す
                            return new Xyz(message);
                        }
                    }
                    -----------------------------------------------------------

                    --- Java（Xyz.java） --------------------------------------
                    public class Xyz extends pirkaWindow {
                        public Xyz(String message){
                            FieldMap field = getFieldMap();
                            //  コンストラクタで渡された文字列を表示
                            field.setValue("msg2", message);
                        }
                        public pirkaWindow returnWindow() {
                            //  nullを戻し呼び出しもとの画面を表示する
                            return null;
                        }
                    }
                    -----------------------------------------------------------

					【補足】
					pirkaでは画面遷移を記憶しているためイベントメソッドでnullを戻すと
					一つ前の画面が表示されますが画面呼び出し時に遷移にループが発生すると
					ループ中の遷移は無効となります。

					画面がA -> B -> C -> D -> E -> C -> F -> G と遷移したとき
					Gのイベントメソッドでnullを戻すとFが表示されます。
					次にFのイベントメソッドでnullを戻すとCが表示されます。
					そしてCがイベントメソッドでnullを戻してもEではなくBが表示されます。

					これは C -> D -> E -> C　のようにループが発生しているからです。
					また、画面の同一性は画面オブジェクトではなく画面クラスで判断します。
				
					上記の遷移では問題が発生する画面構成のときはイベントメソッドでnullを返さずに
					戻るべき画面のオブジェクトを戻すようにしてください。

                3) 戻り型がpirkaFileDownloaderのアクションメソッド
                    戻り型がpirkaFileDownloader のときは pirkaFileDownloader オブジェクトを戻すこと
                    によりファイルダウンロードを行なわせることができます。


                その他、固定的なメソッドとして以下のメソッドを必要に応じて記述することが可能です。

                4) public void onPre(); 又は public pirkaWindow onPre();

                    アクションメソッドが呼び出される前に呼び出されます。
                    共通の処理を行なわせたい時に便利です。
                    またこのメソッドで pirkaWindow オブジェクトを返すとアクションメソッドが呼び出さ
                    れずにそのオブジェクトの画面が表示されます。


                5) public void onElse();　又は　public pirkaWindow onElse();

                    javascript などの submit メソッドや name 属性を持たないサブミットボタンがクリッ
                    クされたときなど、呼び出すメソッド名が不明な場合に pirka より呼び出されます。


                6) public void preDraw();　又は　public pirkaWindow preDraw();

                    pirkaがブラウザーに送信するHTMLファイルイメージを作成する直前に呼び出されます。
                    このメソッドの戻り値は無視されます。（画面遷移しません）


            3.2.4 詳細

                pirka は HTML ファイルに記述してある name 属性の存在する全てのタグについて、以下の操
                作を可能とします。

                ・データーメソッドを使用することによりタグ内の value 属性の値の取得および設定を行な
                　うことができます。
                　通常は value 属性ですが、タグの種類によっては value 属性ではなく開始タグと終了タグ
                　の間に挿入されます。
                　データは1フィールド単位での入出力のほかに画面全体のデータを一括でDTO（Mapオブジェ
                　クト）に取得や格納したり、Beanオブジェクトとの一括の取得や格納を行なうこともできま
                　す。

                ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。
                　ただし type 属性、 name 属性、 value 属性についての変更はできません。
                　また、表示書式やその他のプロパティ値の変更も行なえます。

                以下に name 属性を付加するタグの仕様についてタグ毎に記述します。

                1) <SPAN name="名称"></SPAN>
                    Web画面上の動的に変更できる文字列の表示に使用します。
                    ・HTMLファイルの開始タグから終了タグに挟まれた文字列が初期となります。
                    ・データーメソッドで任意の文字列を設定すると開始タグから終了タグの間に挿入されま
                    　す。
                    ・コントロールメソッドを使用してプロパティ値を変えることによりWeb特殊文字自動変
                    　換機能のON/OFF(デフォルトはON)、このタグ自身の有無指定（デフォルトは有）、その
                    　他のこのタグ内の属性値の変更を行なうことができます。

                2) <DIV name="名称"></DIV>
                    Web画面上での（ループ）繰り返しに使用します。このタグに囲まれた範囲が任意の回数
                    繰り返されます。

                    ・type 属性が loop のときはデーターメソッドを使用してデータ群の追加や削除を行う
                    　ことにより、開始タグから終了タグに挟まれた文字列やタグの繰り返が可能となります。
                    　一覧表等に使用します。

                    ・type属性がswitchのときはデーターメソッドで設定したBooleanオブジェクト値により
                    　開始タグから終了タグに挟まれた文字列やタグをHTMLイメージから一時的に削除するこ
                    　とを可能とします。value属性を指定すると初期値を与えることができます。
                    　（"true"又は"false"）
            
                    ・コントロールメソッドを使用してプロパティ値を変えることによこのタグ自身の有無指
                    　定（デフォルトは無）、このタグ内の属性値の変更を行なうことができます。

                3) <SCRIPT name="名称"></SCRIPT>
                    JavaScript等のScript置き換えなどに使用します。
                    ・データーメソッドで取得できる値の初期値は開始タグから終了タグに挟まれた文字列と
                    　なります。
                    ・データーメソッドで任意の文字列を設定すると開始タグから終了タグの間に挿入されま
                    　す。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                4) <FORM name="名称"></FORM>
                    ・action 属性が未設定でサブミットボタン等がクリックされサーバーに制御が戻ると表示
                    　されていたWeb画面に対応するウィンドウオブジェクトのアクションメソッドが呼ばれ
                    　ます。
                    ・また、JavaScript等でこのフォームオブジェクトのsubmitメソッドを呼び出すとウィン
                    　ドウオブジェクトの onElse メソッドが呼ばれます。
                    ・action 属性が設定されているときはその設定されたURLへHTTPコマンドが発行されます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。
                    ・このフォーム内にファイル選択コントロール（<INPUT TYPE="FILE">）が存在すると
                    　method 属性はPOST、enctype属性は multipart/form-data が初期値として自動的に設
                    　定されます。

                5) <TEXTAREA name="名称"></TEXTAREA>
                    ・データーメソッドで取得できる値の初期値は常に空文字列となります。
                    ・データーメソッドで任意の文字列を設定すると開始タグから終了タグの間に挿入されま
                    　す。
                    ・データーメソッドを使用しブラウザ上でこのテキストエリアコントロールに入力された
                    　文字列の取得を行なうことができます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                6) <INPUT TYPE="TEXT" name="名称" value="値">
                    ・データーメソッドで取得できる値の初期値は常に空文字列となります。
                    ・データーメソッドで任意の文字列を設定するとvalue属性に挿入されます。
                    ・データーメソッドを使用しブラウザ上でこのテキストコントロールに入力された文字列
                    　の取得を行なうことができます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                7) <INPUT TYPE="PASSWORD" name="名称" value="値">
                    ・データーメソッドで取得できる値の初期値は常に空文字列となります。
                    ・データーメソッドで任意の文字列を設定するとvalue属性に挿入されます。
                    ・データーメソッドを使用しブラウザ上でこのテキストコントロールに入力された文字列
                    　の取得を行なうことができます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                8) <INPUT TYPE="HIDDEN" name="名称" value="値">
                    ・データーメソッドで取得できる値の初期値はHTMLファイルの value 属性に記述された
                    　文字列となります。
                    ・データーメソッドで任意の文字列を設定するとvalue属性に挿入されます。
                    ・データーメソッドを使用しこのテキストコントロールに Javascript 等で格納された文
                    　字列の取得を行なうことができます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                9) <INPUT TYPE="RADIO" name="名称" value="値">
                    ・ラジオボタンの名称は他のタグとは異なり名称の後に$から始まり英数字およびアンダー
                    　バーで構成されるサフィックスを付加します。
                    ・HTMLイメージの名称はサフィックスが除かれた名称となります。
                    　（サフィックスが除かれた名称でグルーピングされます）
                    ・データーメソッドでは個々のラジオボタンが保有するvalue値の設定および選択する
                    　value 値の設定、選択されている value 値の取得を行ないます。
                    ・複数階層のループ中にラジオボタンが存在するときは groupLevel プロパティを設定し
                    　どの階層のループでグループ化するかの指定が可能です。
                    　デフォルトは0でありループの最深でグループ化されます。
                    　1を指定すると一つ外側のループの繰り返し単位でグループ化されます。以降一つ増え
                    　る毎に外側のループでグループ化されます。
                    ・コントロールメソッドを使用して groupLevel プロパティの変更、タグ内の属性値の変
                    　更を行なうことができます。

                10) <INPUT TYPE="CHECKBOX" name="名称">
                    ・データーメソッドで任意の Boolean オブジェクトを設定します。 true を設定すると
                    　チェックされます。
                    ・データーメソッドを使用しチェックボックスの状態の取得を行なうことができます。
                    　true はチェックされた状態を表します。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                11) <INPUT TYPE="FILE" name="名称" value="値">
                    ・データーメソッドで取得できる値の初期値は常に空文字列となります。
                    ・データーメソッドで任意の文字列を設定するとvalue属性に挿入されます。
                    　ただし、現状殆どのブラウザでは value 属性に値を設定してもブラウザの制約で画面
                    　上には表示されません。(値は入っています)
                    ・データーメソッドを使用しブラウザ上でこのテキストコントロールに入力された文字列
                    　（ファイル名）の取得およびアップロードされたファイルデータを Stream として取得
                    　することができます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                12) <INPUT TYPE="SUBMIT" name="名称" value="値">
                    ・データーメソッドで取得できる値の初期値は value 属性に記述された文字列となります。
                    ・データーメソッドで任意の文字列を設定すると value 属性に挿入されボタン名称として
                    　表示されます。
                    ・action 属性が未設定の FORM タグ内に配置されているサブミットボタンがクリックさ
                    　れると、ウィンドウオブジェクトの同じ名称のメソッドが呼び出されます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                13) <INPUT TYPE="IMAGE" name="名称">
                    ・action 属性が未設定の FORM タグ内に配置されているこのイメージがクリックされると
                    　ウィンドウオブジェクトの同じ名称のメソッドが呼び出されます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。
                    ・また、コントロールメソッドを使用してイメージ作成オブジェクトを登録し動的なイメ
                    　ージを作成し表示させることも可能です。
                    　(イメージ作成オブジェクトを登録するとSRC属性は自動的に変更されます)

                14) <BUTTON TYPE="SUBMIT" name="名称"></BUTTON>
                　【IE6では正しくレスポンスが返らない為、使用禁止の運用制限とします】
                    ・任意の value 属性を記述しても pirka により異なる値に置き換えられるため value
                    　属性は指定しないでください。
                    ・action 属性が未設定の FORM タグ内に配置されているこのボタンがクリックされると
                    　ウィンドウオブジェクトの同じ名称のメソッドが呼び出されます。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                15) <SELECT name="名称"></SELECT>
                    ・データーメソッドで取得できる値は String[] オブジェクトであり <option> タグで
                    　selected 指定されている value 属性値の配列となります。
                    　value 属性が存在しなければ表示テキストが配列に格納されます。
                    ・データーメソッドで任意の String[] オブジェクトを設定すると、その文字列と一覧デ
                    　ータの value 属性が一致する一覧データが選択されます。
                    　value 属性が存在しない一覧データのときは value 属性の代わりに表示テキストと一
                    　致するかの比較を行ないます。
                    ・データーメソッドを使用しブラウザ上で選択された全ての一覧項目の value 属性（
                    　value属性が存在しなければ表示文字列）が String[] オブジェクトに格納されます。
                    ・コントロールメソッドを使用して、一覧データやタグ内の属性値の変更を行なうことが
                    　できます。
                    ・一覧データは jp.oarts.pirka.core.ctrl.SelectList クラスのオブジェクトです。
                    ・size 属性を指定しないとプルダウンメニューコントロールに、 size 属性を指定する
                    　とリストコントロールになります。
                    ・現在optgroupには対応していないため使用できません。

                16) <IMG name="名称">
                    ・コントロールメソッドを使用して、一覧データやタグ内の属性値の変更を行なうことが
                    　できます。
                    ・また、コントロールメソッドを使用してイメージ作成オブジェクトを登録し動的なイメ
                    　ージを作成し表示させることを可能とします。
                    　(イメージ作成オブジェクトを登録するとSRC属性は自動的に変更されます)

                17) <A name="名称">
                    ・href 属性に空文字が設定されているときにクリックされると、ウィンドウオブジェク
                    　トの同じ名称のアクションメソッドが呼び出されます。
                    ・href 属性に URL が格納されていれば、その URL にジャンプしアクションメソッドは
                    　呼び出されません。
                    ・A タグは SUBMIT と異なりフォーム上の各コントロールに入力した値は Web サーバー
                    　へ送信されないため、このイベントメソッド内でデーターメソッドを使用しても各コン
                    　トロールのデーター値は入力された値にはならないので注意が必要です。
                    ・A タグを利用し SUBMIT を行ないたい時は、A タグに JavaScript を記述し Form オブ
                    　ジェクトの SUBMIT メソッドを呼び出すか、リンクのサブミット設定『3.2.6 コントロ
                    　ールメソッド／2-13) リンクのサブミット設定を参照』を行ってください。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。

                18) <LABEL name="名称">
                    ・データーメソッドを使用してラベル値の変更が可能です。
                    ・コントロールメソッドを使用してタグ内の属性値の変更を行なうことができます。


            3.2.5 データーメソッド

                ウィンドウオブジェクトは Web 画面へ動的な文字列の表示、および Web 画面で入力されたデ
                ータの取得を、データーメソッドを使用して行ないます。
                データーメソッドは、ウィンドウオブジェクトのクラスの親クラスである
                jp.oarts.pirka.core.win.pirkaWindow クラスおよび jp.oarts.pirka.core.kernel.FieldMap
                クラスに実装されています。
                データメソッドの種類を以下に示します。

                1) pirkaWindowに実装されているメソッド

                    1-1) フィールドマップの取得

                        Web 画面上に存在する name 属性を持つ全てのタグ情報のマップ（フィールドマップ）
                        を取得します。
                        個々のデータに対するデータメソッド、コントロールメソッドはこのマップを通して行
                        なわれます。
                        また、このメソッドは CheckAndTeller クラス（後述）でも使用可能です。

                        public FieldMap getFieldMap();


                    1-2) フィールドマップの新規作成

                        ループ中で使用するフィールドマップを新規に作成します。
                        このメソッドによって作成されたフィールドマップを FieldMap#addFieldMap メソッ
                        ドを使用して追加することにより、ループを作成することができます。

                        public FieldMap createLoopFieldMap(String loopFieldName);


                    1-3) ループ中のデフォルトフィールドマップの取得

                        ループ中で使用するデフォルトのフィールドマップを取得します。
                        このメソッドで取得したフィールドマップ内の各フィールドに設定した値や
                        フォーマット情報やその他設定はcreateLoopFieldMapメソッドで作成される
                        フィールドマップのデフォルト値となります。
                        またsetDtoメソッド、setBeanListメソッドでデータを格納したループにも用いられます。
                        このメソッドで取得したフィールドマップはFieldMap#addFieldMapメソッドには
                        使用できません。

                        public FieldMap getDefaultLoopFieldMap(String loopFieldName);


                    1-4）DTOオブジェクトを取得

                        画面上の入力フィールドの全ての値でDTOオブジェクト（Mapオブジェクト）として取
                        得します。
                        キーはフィールド名、値はフィールド値が格納されます。
                        このMapを変更しただけでは画面表示には反映されません。
                        画面に反映するときには必ず setDto メソッドを使用して下さい。
                        基本的にはチェックボックス以外の入力情報はStringオブジェクト、チェックボック
                        スは Boolean オブジェクトとして値が格納されます。
                        Select タグでの複数選択は TAB 文字で区切られた String となります。
                        ループは List オブジェクトに Map オブジェクトが格納されます。
                        フィールド名の変更や他のクラスオブジェクトに変更して Map オブジェクトを作成
                        したいときはコンバーターを指定してください。

                        public Map<String, Object> getDto(Converter... converters);


                    1-5) DTOオブジェクトの設定

                        DTOオブジェクトの内容を画面の各フィールドに反映させます。
                        キーはフィールド名、値はフィールド値が格納されます。
                        ループは List オブジェクトに Map オブジェクトが格納されていることを前提とし
                        ます。
                        項目が存在しない場合フィールドマップ上の値の置き換えは行なわれません。
                        項目が存在し値が null のときはループは0回ループ、チェックボックスは false 、
                        その他は空文字がセットされます。
                        Select タグでの複数選択は TAB 文字で区切られた String とします。
                        フィールド名の変更や他のクラスオブジェクトに変更して Map オブジェクトを作成
                        したいときはコンバーターを設定することにより可能となります。

                        public void setDto(Map<String, Object> dto, Converter... converters);


                    1-6) Beanオブジェクトへのデータ設定

                        画面入力項目値を Bean オブジェクトへ格納します。
                        フィールド名と同名の Bean オブジェクトのメンバへ値が格納されます。
                        ループデータは対象外となります。
                        Beanオブジェクトのメンバーの型はString、Boolean、Integer、Long、Date、
                        Time、Timestamp、BigDecimalの時には自動変換が行われます。
                        フィールド名の変更や他のクラスオブジェクトに変更して Bean オブジェクトに設定
                        させたいときはコンバーターを指定することにより可能となります。

                        public void getBean(Object beanObject, Converter... converters) ;


                    1-7) Listオブジェクトの取得

                        FieldMap オブジェクトの指定されたループフィールドに格納されているデータで
                        List オブジェクトを作成します。
                        List オブジェクトが格納するデータはパラメータで指定された Bean クラスのオブ
                        ジェクトです。
                        フィールド名と同名の Bean オブジェクトのメンバへ値が格納されます。
                        フィールド名の変更や他のクラスオブジェクトに変更して Bean オブジェクトに設定
                        させたいときはコンバーターを指定することにより可能となります。

                        public List getBeanList(Class beanClass, FieldMap fieldMap,
                                String loopFieldName, Converter... converters);


                    1-8) Beanオブジェクトの反映

                        Bean オブジェクトの内容を画面の各フィールドに反映させます。
                        Bean オブジェクトが存在するときは、簡単に各フィールドにデータを設定させること
                        ができます。
                        ループは対象外とします。
                        Bean オブジェクトに同名のメンバが存在しない場合、フィールドマップ上の値の置
                        き換えは行なわれません。
                        Select タグでの複数選択は TAB 文字で区切られた String とします。
                        Beanオブジェクトのメンバーの型はString、Boolean、Integer、Long、Date、
                        Time、Timestamp、BigDecimalの時には自動変換が行われます。
                        フィールド名の変更や他のクラスオブジェクトに変更して Map オブジェクトを作成
                        したいときはコンバーターを設定することにより可能となります。

                        public void setBean(Object beanObject, Converter... converters);


                    1-9) Listオブジェクトの反映

                        List に格納されている Bean オブジェクトの内容を指定されたループフィールドの
                        FieldMapオブジェクトへ格納します。
                        Bean オブジェクトの List が存在するときは、簡単に一覧表示を行なうことができ
                        ます。
                        Bean に項目が存在しない場合フィールドマップ上の値の置き換えは行なわれません。
                        Select タグでの複数選択は TAB 文字で区切られた String とします。
                        フィールド名の変更や他のクラスオブジェクトに変更して Map オブジェクトを作成
                        したいときはコンバーターを設定することにより可能となります。

                        public void setBeanList(List list, FieldMap fieldMap,
                                String loopFieldName, Converter... converters);


                    1-10) イベントのループインデックスの取得

                        アクションメソッドが呼び出されたイベントのループインデックスを取得します。
                        ループ中のボタンがクリックされたとき何番目のボタンがクリックされたかがインデ
                        ックスとして取得できます。
                        ループ外のイベントはサイズ0の配列が取得されます。
                        ループ中のイベントでは一番外側のループがインデックス0、以下内側になるほどイ
                        ンデックスが増えて、そのインデックス値が格納されます。

                        public int[] getActionLoopIndex();


                2) FieldMapに実装されているメソッド


                  2-1) 1フィールドへのデータの設定

                    fieldName で指定された HTML ファイル上の上の同一名称（同一 name 属性値）のタグの
                    value 属性又は開始タグ〜終了タグ間に指定された value 値を埋め込みます。
                    value 属性か開始タグ〜終了タグ間のどちらに埋め込まれるかはそのタグによって決まり
                    ます。
                    通常は value 属性値に埋め込まれます。

                    public void setValue(String fieldName, String value);
                    public void setValue(String fieldName, int value);
                    public void setValue(String fieldName, Integer value);
                    public void setValue(String fieldName, long value);
                    public void setValue(String fieldName, Long value);
                    public void setValue(String fieldName, BigDecimal value);
                    public void setValue(String fieldName, Date value);
                    public void setValue(String fieldName, Time value);
                    public void setValue(String fieldName, Timestamp value);

                    //  SELECTタグで複数選択時に使用
                    public void setValue(String fieldName, String[] values);

                    //  チェックボックス、スイッチで使用
                    public void setValue(String fieldName, boolean value);
                    public void setValue(String fieldName, Boolean value);

                    //  ラジオボタンで使用、この場合のfieldNameはサフィックスを抜かした名前を指定
                    public void setGroupValue(String fieldName, String value);
					public void setGroupValue(String fieldName, boolean value);
					public void setGroupValue(String fieldName, Boolean value);
					public void setGroupValue(String fieldName, int value);
					public void setGroupValue(String fieldName, Integer value);
					public void setGroupValue(String fieldName, long value);
					public void setGroupValue(String fieldName, Long value);
					public void setGroupValue(String fieldName, BigDecimal value);
					public void setGroupValue(String fieldName, Date value);
					public void setGroupValue(String fieldName, Time value);
					public void setGroupValue(String fieldName, Timestamp value);


                  2-2) 1フィールドからのデータの取得

                    fieldName で指定された HTML ファイル上の上の同一名称（同一 name 属性値）のタグの
                    Web画面から入力された値を取得します。
                    入力される形式に対応するオブジェクトでデータの取得が可能です。

                    public String getValueString(String fieldName);
                    public Integer getValueIntObject(String fieldName);
                    public int getValueInt(String fieldName);
                    public int getValueInt(String fieldName, int defaultValue);
                    public Long getValueLongObject(String fieldName);
                    public long getValueLong(String fieldName);
                    public long getValueLong(String fieldName, long defaultValue);
                    public BigDecimal getValueBigDecimal(String fieldName);
                    public Date getValueDate(String fieldName);
                    public Time getValueTime(String fieldName);
                    public Timestamp getValueTimestamp(String fieldName);

                    //  SELECTタグで複数選択時に使用
                    public String[] getValueStrings(String fieldName);

                    //  チェックボックス、スイッチで使用
                    public boolean getValueBoolean(String fieldName);

                    //  ラジオボタンで使用、この場合のfieldNameはサフィックスを抜かした名前を指定
                    public String getGroupValue(String fieldName);
					public String getGroupValueString(String fieldName);
					public boolean getGroupValueBoolean(String fieldName);
					public boolean getGroupValueBooleanObject(String fieldName);
					public Integer getGroupValueIntObject(String fieldName);
					public int getGroupValueInt(String fieldName);
					public int getGroupValueInt(String fieldName, int defaultValue);
					public Long getGroupValueLongObject(String fieldName);
					public long getGroupValueLong(String fieldName);
					public long getGroupValueLong(String fieldName, long defaultValue);
					public BigDecimal getGroupValueBigDecimal(String fieldName);
					public Date getGroupValueDate(String fieldName);
					public Time getGroupValueTime(String fieldName);
					public Timestamp getGroupValueTimestamp(String fieldName);

                    //  ファイルアップロードで使用
                    public InputStream getInputStream(String fieldName) throws IOException;


                  2-3) ループへのデータ設定

                    pirkaWindow#createLoopFieldMap メソッドで作成したフィールドマップの追加や置き換
                    え、削除を行ないます。

                    //  置き換え
                    public void setFieldMap(String fieldName, int index, FieldMap fieldMapValue);
                    //  追加
                    public void addFieldMap(String fieldName, FieldMap fieldMapValue);
                    //  削除
                    public void removeFieldMap(String fieldName, int index);
                    //  全削除
                    public void clearFieldMap(String fieldName)；


                  2-4) ループからのデータ取得

                    ループフィールドが格納しているフィールドマップを取得します。

                    //  登録されているフィールドマップ数取得
                    public int getFieldMapSize(String fieldName);
                    //  指定された位置のフィールドマップ取得
                    public FieldMap getFieldMap(String fieldName, int index);
                    //  登録されている全フィールドマップを配列として取得
                    public FieldMap[] getFieldMaps(String fieldName);


                  2-5) 全データを空にする

                    public void clearAllValue();


            3.2.6 コントロールメソッド

                ウィンドウオブジェクトは HTML ファイル内の各コントローラー（テキストフィールドやボタ
                ン）の属性や Select タグの一覧情報の設定／変更、入力データのチェック方法設定、表示フ
                ォーマット指定等をコントロールメソッドを使用して行ないます。
                コントロールメソッドはウィンドウオブジェクトのクラスの親クラスである
                jp.oarts.pirka.core.win.pirkaWindow クラスに実装されています。
                コントロールメソッドの種類を以下に示します。

                1) pirkaWindowに実装されているメソッド

                    1-1) 入力データチェック用メソッド

                        HTML ファイル内の Web 画面で入力可能なタグに入力された値をチェックするオブジ
                        ェクトの登録を行ないます。
                        チェックは制御がサーバーに戻された時に自動で行なわれます。
                        ただし、自動チェック実行設定で『自動実行しない』設定がされたサブミットボタン
                        等ではチェックは行なわれません。

                        自動チェックは setCheck メソッドの登録順に行なわれ、エラー表示もこの順番で表
                        示されます。

                        自動チェック登録の途中にチェックブレーカーを登録することができます。
                        順次自動チェックが行なわれて行く過程でチェックブレーカーが登録されているポイ
                        ントで既にエラーが発生していたら、以降のチェックをスキップします。
                        自動チェック登録の途中や最後にチェックリターナーを登録することができます。
                        チェックリターナーはチェックブレーカーと同様にエラー発生していたら以後のチェ
                        ックをスキップします。
                        また、スキップ後に制御は pirka に移動し自画面を再描画します。
                        チェックリターナーが最後に登録されていないとエラーが発生してもイベントメソッ
                        ドが呼び出されます。

                        エントリーポイントクラスでメッセージ ENUM クラスの登録を行なった場合、String
                        オブジェクトのメッセージはランタイムエラーが発生するため使用禁止になります。
                        これはメッセージの一元管理を行なうときに有効です。

                        また、チェックでエラーとなった入力タグに関連付けられている LABEL タグのスタ
                        イルは自動的にエラースタイルとなります。
                        
                        その他の制限事項ですが、チェッカーはラジオボタンには設定できません。


                        1-1-1) チェッカー登録・削除

                                //  チェッカーの追加（エラーメッセージはpirkaのデフォルトウを使用）
                                protected void addCheck(String fieldName, Checker... checker);
                                //  チェッカーの追加（エラーメッセージは任意のメッセージを使用）
                                protected void addCheck(String fieldName, String message,
                                             Checker... checker);
                                //  チェッカーの追加（エラーメッセージは事前登録してあるenumの値を使用）
                                protected void addCheck(String fieldName, pirkaMessage message,
                                             Checker... checker);
                                //  チェック＆テラー（）の追加
                                protected void addCheck(CheckAndTeller... checckAndTeller);
                                //  ブレーカーの追加
                                protected void addErrorCheckBreak();
                                //  リターナーの追加
                                protected void addErrorCheckReturner();
                                //   登録済みの全チェッカー削除
                                protected void clearCheck();


                        1-1-2) チェッカー

                            Checker は pirka が標準で用意したオブジェクトやクラスから作成したオブジ
                            ェクト、ユーザーが独自に作成したオブジェクト等を指定します。
                            複数指定されたときは AND 条件（全てのチェッカーがOKでないときはエラー）
                            となります。

                            pirkaが標準に用意するチェッカーオブジェクト
                                必須入力                            PirkaChecker.required
                                日付                                PirkaChecker.date
                                時間                                PirkaChecker.time
                                日時                                PirkaChecker.datetime
                                int値                               PirkaChecker.intValue
                                long値                              PirkaChecker.longValue
                                数値（少数含む）                    PirkaChecker.numeric
                                一般的なSQLインジェクション対策     PirkaChecker.sqlInjection
                                    『空白+,="'|;\』はエラーとします。
                                    このチェッカーの指定で全てのSQLインジェクションに対して安全を
                                    保証することはできません。
                                    SQLで使用される特殊文字はデータベースの種類毎に拡張されているため、
                                    使用するSQL文、日本語文字コード、DBへのアクセス方法毎に対策が必要となります。


                            pirkaが標準に用意するチェッカークラス
                                桁数            PirkaCheckerLength
                                範囲            PirkaCheckerNumericRange
                                入力文字        PirkaCheckerString
                                                入力文字チェッククラスのコストラクタに与えられる文字種を以下に
                                                記します。
                                                文字種は複数指定可能でありそのどれにも該当しない文字が存在するとエラー
                                                となります。
                                                
                                                半角数字(0〜9)               PirkaCheckerStringChars.NUM
                                                英小文字（a〜z）             PirkaCheckerStringChars.LOW_ALPHABET
                                                英大文字（A〜Z）             PirkaCheckerStringChars.HIGHT_ALPHABET
                                                全ての半角文字               PirkaCheckerStringChars.HALF
                                                全ての全角文字               PirkaCheckerStringChars.WIDE
                                                全角ひらがな                 PirkaCheckerStringChars.WIDE_HIRAGANA
                                                全角カタカナ                 PirkaCheckerStringChars.WIDE_KATAKANA
                                                半角カナ                     PirkaCheckerStringChars.HARF_KANA
                                                半角スペース                 PirkaCheckerStringChars.SPACE
                                                全角スペース                 PirkaCheckerStringChars.WIDE_SPACE
                                                メールアドレス               PirkaCheckerStringChars.MAIL
                                                パス文字（MS-Windows）       PirkaCheckerStringChars.PATH_WIN
                                                その他                       PirkaCheckerStringCharsクラス
                                                                             のコンストラクターに与えられた
                                                                             文字列
                                                                             また、
                                                                             PirkaCheckerStringCharsIFを
                                                                             実装したクラスのオブジェクト

                        1-1-3) チェック＆テラー

                            CheckAndTellerはチェックを行いその内部でエラーを追加するオブジェクトです。
                            そのオブジェクト内では全ての入力データ値が取得できます。
                            関連エラーチェックなどに使用します。


                        1-1-4) チェック
                            入力値のチェックを行ないます。
                            このチェックは自動チェックと同処理であり、チェック内容はチェッカー登録・
                            削除で登録された内容です。
                            チェッカーとしてリターナーが登録されていてかつエラーが発生したらアクショ
                            ンメソッド内のこのメソッド呼び出し、以降の処理は行なわれません。
                            通常はpirkaが自動的にチェックを行ないますが、onElseメソッドや自動チェッ
                            ク禁止にされたサブミットのアクションメソッドでは自動チェックは行なわれま
                            せん。

                        1-1-5) エラー数の取得

                            自動チェックまたはcheckメソッドで発生したエラー数の取得

                            protected int getAutoCheckErrorCount();


                    1-2) エラーメッセージ登録

                        自動チェックおよびcheckメソッドで発生したエラーメッセージは自動的に登録され
                        ます。
                        しかし、アクションメソッド内やCheckAndTellerオブジェクト内で独自なエラーチェ
                        ックを行なったときには登録が必要となるので、このメソッドでエラーメッセージを
                        登録します。

                        protected void addError(String message);
                        protected void addError(pirkaMessage message);
                        protected void addError(String fieldName, String message);
                        protected void addError(String fieldName, pirkaMessage message);


                    1-3) エラーメッセージマネージャーの登録

                        エラーメッセージのレイアウトなどを変更したいときは独自のエラーメッセージマネ
                        ージャーを登録します。
                        エラーメッセージマネージャーはErrorMessageManagerIFを実装してください。

                        //  エラーメッセージマネージャーを登録
                        public void setErrorMessageManager(
                                ErrorMessageManagerIF errorMessageManager);


                2) FieldMapに実装されているメソッド

                    2-1) タグ属性

                        HTMLファイル内に存在する name 属性が与えられているタグ内の属性の追加・取得･
                        削除を行ないます。
                        optionMap を設定するときはキーが属性名、値が属性値となります。
                        またこのときの属性名は必ず英小文字としてください。

                        //  属性名単独で使用する属性（zzz=bbbではない形式）を設定
                        public void setOption(String fieldName, String optionName);
                        //  属性を設定
                        public void setOption(String fieldName, String optionName, String optionValue);
                        //  属性マップを設定します。マップのキーは属性名、値は属性値となります
                        public void setOption(String fieldName, Map<String, String> optionMap);
                        //  属性が存在しているかの確認
                        public boolean isOptionExist(String fieldName, String optionName);
                        //  属性値を取得
                        public String getOption(String fieldName, String optionName);
                        //  属性マップを取得
                        public Map<String, String> getOption(String fieldName);
                        //  属性を削除
                        public void clearOption(String fieldName, String optionName);
                        //  設定されている属性を全て削除
                        public void clearOption(String fieldName);


                    2-2) 一覧情報

                        SELECTタグに一覧情報の設定・取得･削除を行ないます。

                        //  選択一覧リストの設定
                        public void setSelectList(String fieldName, SelectList selectList);
                        //  選択一覧リストの取得
                        public SelectList getSelectList(String fieldName);
                        //  選択一覧リストの全項目を削除
                        public void clearSelectList(String fieldName);


                    2-3) 表示フォーマット

                        <span>タグや<input type="text">タグに表示フォーマットの設定・取得･削除を行な
                        います。

                        //  表示フォーマット設定
                        public void setFormat(String fieldName, FieldFormat fieldFormat);
                        //  表示フォーマット取得
                        public FieldFormat getFormat(String fieldName);
                        //  表示フォーマット削除
                        public void clearFormat(String fieldName);

                        指定可能なフォーマートはjp.oarts.pirka.core.util.format.FieldFormatインター
                        フェースを実装したクラスのオブジェクトです。

                        pirkaの標準として以下のクラスが存在します。

                            ・DateFieldFormat       日付フォーマット
                                    コンストラクタで書式（SimpleDateFormatと互換）文字列を渡す
                            ・DateTimeFieldFormat   日付時刻フォーマット
                                    コンストラクタで書式（SimpleDateFormatと互換）文字列を渡す
                            ・TimeFieldFormat       時刻フォーマット
                                    コンストラクタで書式（SimpleDateFormatと互換）文字列を渡す
                            ・NumericFieldFormat    数値フォーマット
                                    コンストラクタで書式（DecimalFormatと互換）文字列を渡す


                    2-4) エラー設定

                        自動チェックおよび check メソッドでエラーとなったフィールドに自動的にエラー
                        設定されますが、アクションメソッド内や CheckAndTeller オブジェクト内で独自な
                        エラーチェックを行なった時にエラーメッセージを登録するメソッドです。

                        エラー設定されたフィールドはエラー強調されて表示されます。

                        //  エラーフラグを設定する
                        public void setError(String fieldName, boolean errorFlag);
                        //  エラー状態かを確認する
                        public boolean isError(String fieldName);


                    2-5) Web特殊文字自動変換機能のON/OFF

                        この機能をOFFにすると'<'等のタグで使用される文字の変換が行なわれません。
                        SPANタグで使用します。
                        デフォルトはONです。

                        //  Web特殊文字自動変換機能設定
                        public void setSafeMode(String fieldName, boolean safeFlag);
                        //  Web特殊文字自動変換機能設定確認
                        public boolean isSafeMode(String fieldName);


                    2-6) タグ効果の指定

                        この機能をOFFにすると対応するタグがHTMLファイルから削除されます。
                        タグで囲まれた内容は削除されません。
                        DIV,SPANタグで使用します。
                        デフォルトはDIVタグではOFF、SPAMタグではONです。

                        //  タグ効果の指定
                        public void setTagEffective(String fieldName, boolean tagEffective);
                        //  タグ効果の取得
                        public boolean isTagEffective(String fieldName);


                    2-7) グループレベルの指定

                        グループ化を行なうループの階層を指定します。
                        ループ中のラジオボタンで使用します。
                        デフォルトは0です。

                        //  グループレベルの指定
                        public void setGroupLoopLevel(String fieldName, int groupLevel);
                        //  グループレベルの取得
                        public int getGroupLevel(String fieldName);


                    2-8) ID属性、for属性サフィックス付加指定

                        ループ中のID属性,for属性にループ識別用のサフィックスの自動的付加機能の指定で
                        す。
                        ループ中のLABELタグとそれに関連ずけられるコントロールで使用されます。
                        デフォルトはtrue（付加する）です。

                        public void setSuffixFlag(String fieldName, boolean suffixFlag);


                    2-9) イメージオブジェクトの設定

                        イメージオブジェクトを設定します。
                        IMGタグ、<input type="image">タグで使用します。
                        public void setImage(String fieldName, pirkaImage image);


                    2-10) 自動チェック実行設定

                        自動チェックを行なわせるかの設定を行ないます。
                        サブミットボタン等のアクションメソッドを呼び出すコントロールフィールドに使用
                        します。
                        デフォルトはtrue（自動チェックを行なう）です。

                        public void setAutoCheck(String fieldName, boolean autoCheckFlag) {


                    2-11) 正式なフィールド名の設定

                        エラーメッセージに表示される正式なフィールド名（日本語名など）の設定を行ない
                        ます。
                        この設定を行なわなければフィールド名が用いられます。

                        //  設定
                        public void setOfficialFieldName(String fieldName, String officialFieldName);
                        //  取得
                        public String getOfficialFieldName(String fieldName);


                    2-12) Ajaxの設定

                        ScriptタグにAjaxScriptオブジェクトの設定を行ないます。
                        Ajaxについての詳細は3.2.10 Ajaxを参照してください。

                        //  設定
                        public void setAjaxScript(String fieldName, AjaxScript ajaxScript);
                        //  取得
                        public AjaxScript getAjaxScript(String fieldName);


                    2-13) リンクのサブミット設定

                        Aタグ（リンク）をクリックしたときにサブミットボタンと同様の動作を行う設定です。
                        サブミットボタンと同様の自動エラーチェックや入力された値の取得が可能となります。
                        サブミット設定を行うとそのAタグのhref属性の設定及びonClick属性の設定は無効となります。
                        clearSubmitScriptメソッドで削除すると無効となった属性値は復活します。
                        setSubmitScriptメソッドはサブミットを行うFORMタグ名の指定が必要です。
                        指定するFORMタグはループ中に存在してはいけません。
                        実行時のブラウザはjavascriptが有効でなければ動作しません。
                        
                        //  設定
                        public void setSubmitScript(String dieldName, String formName);

                        //  設定削除
                        public void clearSubmitScript(String dieldName);


            3.2.7 モックアップ機能

                    作成したHTMLファイルがブラウザーのローカルファイル読み込みで表示するモックアップ
                    時とWebサーバーから送られた情報を表示する動的なWebアプリケーションとして動作する
                    ときに内容を変更する必要があるときは、以下の属性およびタグを使用することにより
                    同じHTMLファイルを双方で使用可能となります。

                    ・モックアップ時は必要な属性だがサーバー動作時には不必要な属性があるときは、その
                    　属性名の頭にpirka_delete_を付加した属性をタグに追加することにより、サーバー動
                    　作時にはその属性は削除されます。
                        ex)
                            モックアップ時：<image name="image01"
                                                src="../img/abc.gif" pirka_delete_src>
                            サーバー動作時：<image name="image01">

                    ・pirkaで動的出力するときはHTMLファイル内のタグ内の属性に"pirka_change_"で始まる
                    　タグがあれば"pirka_change_"を削除した属性名に置き換えます。
                    ・pirkaで動的出力するときはHTMLファイル内の<pirka_mockup>から</pirka_mockup>に囲
                    　まれた範囲のコメント以外の部分は削除されコメント部が有効となります。

                        <pirka_mockup>
                            <!--
                            <abc>
                                あいうえお
                            </abc>
                            -->
                            <xyz>
                                    かきくけこ
                            </xyz>
                        </pirka_mockup>

                    は

                            <abc>
                                あいうえお
                            </abc>

                    となります。
                    ちなみにモック動作時には
                    <pirka_mockup>と</pirka_mockup>はブラウザで無視されるため
                            <xyz>
                                    かきくけこ
                            </xyz>
                    が有効となります。

                    また、インクルード機能（3.2.8 インクルード機能を参照）を使用しているHTMLファイル
                    では通常モックとしては使用できません。
                    これはモックアップコンパイラを使用してインクルード済みのHTMLファイルを作成する
                    ことにより解決することが可能です。

                    【モックアップコンパイラの使用方法】
                       
                       java -jar pirka.jar 入力HTMLファイルパス 出力HTMファイルパス
                       

            3.2.8 インクルード機能

                    HTMLファイル内に以下の構文でコメントを記述することにより他のHTMLファイルの内容を
                    挿入すことが可能となります。
                    
                    <!--#include dir="○○○" packege="△△△" file="◇◇◇" -->

                      ○○○はモックアップコンパイラ用のファイル格納ディレクトリ（相対パス、絶対パス）
                      です。
                      相対ディレクトリが指定されるとインクルードコメントが記載されているファイルから
                      の相対パスとなります。

                      △△△はHTMLリソースファイル（サーバー運用時）として扱われた時のファイル格納パ
                      ッケージ名です。

                      ◇◇◇インクルードを行なうHTMLファイル名です。
                      拡張子がhtmlの場合はそのファイルのbodyタグの内側のみインクルードされます。
                      拡張子がhtml以外のときはファイルの全内容が挿入されます。
                      
                      
            3.2.9 別ウィンドウのインスタンス管理
                    JavaScript等で新たなウインドウを作成する時には指定するURLに__PIRKA__INS__
                    パラメータを追加して任意のインスタンス名を指定してください。
                    pirkaはインスタンス名毎にデータの自動保存管理を行います。
                 
                    たとえばURLが
                    
                        http://localhost/pirkaSample/sample
                    
                    の時には以下の様にして別ウインドウを開きます。
                    
                        <input type="button" value="サブウインドウAを開く" 
                            onClick="window.open('./sample?__PIRKA__INS__=AWIN,'subA','');">
                    
                    このときインスタンス名とウインドウ名（上記例ではsuba）の組み合わせを
                    常に一定にしておくと開かれる画面とpirika内で管理されるデータの整合性が
                    保たれ、予期せぬ障害を回避できます。
                 
                    また、別ウインドウを使用するときはEntryPointクラスを派生して新たな
                    エントリーポイントを作成することが必要です。
                    そのクラスのgetSubWindowが戻すPirkaWindowオブジェクトが別ウインドウに
                    表示されます。
                    
                    別ウインド間のデータの受け渡しはWEBサーバー内ではセションを使用します。
                    ブラウザ内ではJavascript等で行ってください。
                    
                    サンプルとしてpirkaSampleのjp/oarts/pirka/sample/s12/SubWin01.htmlを
                    参照してください。
            
            
            3.2.10 Ajax
                    
                    pirkaでは特にJavascriptを記述しなくてもAjaxを使用しWEBサーバーと非同期通信を
                    行うことが可能です。
                    （pirkaがサポートしていない複雑な処理を行うときはJavaScriptを記述する
                    必要があります）
                    
                    Ajaxを使用するにはAjaxScriptオブジェクトを作成し、それをSCRITPタグへ
                    setAjaxScriptメソッドを使用してセットします。
                    
                    AjaxScriptオブジェクトにはWEBブラウザから非同期で送信されるデータを受信
                    したときに動作し処理を行うrunメソッドと、ブラウザで動作し処理を行う
                    JavaScriptのラッパーオブジェクトで構成されます。
                    
                    runメソッドではブラウザーから送信されるデータを引数（Map<String, String[]>）
                    で取得し、ブラウザーへのレスポンス送信はResponseDataオブジェクトを作成し
                    それを戻すことにより行われます。
                    
                    JavaScriptのラッパーオブジェクトはサーバーへの通信前、通信後、エラー時の
                    それぞれのタイミングで動作させるように以下のメソッドを使用して複数設定
                    することができます。
                      1) 通信前
                         addPreScript
                      2) 通信後
                         addResScript
                      3) エラー時（セションタイムアウト時も含む）
                         addErrScript
                    
                    以下に定義済みJavaScriptのラッパーオブジェクトを示します。
                    　1) JavaScriptAlert
                  　     固定文字列のメッセージ又はWEBブラウザーからのレスポンスデータを
                         使用してアラート（メッセージボックス）を表示させます。
                      2) JavaScriptElementById
                         HTML上のID属性で指定されるオブジェクトの任意のプロパティに
                         固定文字列又はWEBブラウザーからのレスポンスデータをセットします。
                         このオブジェクトはレスポンスが正常に戻らないと動作できないため
                         通信後のみ設定可能です。
                      3) JavaScriptInnerHTML
                         HTML上のID属性で指定されるオブジェクトのinnerHTMLプロパティに
                         固定文字列又はWEBブラウザーからのレスポンスデータをセットします。
                         このオブジェクトはレスポンスが正常に戻らないと動作できないため
                         通信後のみ設定可能です。
                      4) JavaScriptInnerText
                         HTML上のID属性で指定されるオブジェクトのinnerTextプロパティに
                         固定文字列又はWEBブラウザーからのレスポンスデータをセットします。
                         このオブジェクトはレスポンスが正常に戻らないと動作できないため
                         通信後のみ設定可能です。
                      5) JavaScriptSource
                         指定された文字列をJavaScriptとして動作させます。
                      6) JavaScriptSrc
                         HTML上のID属性で指定されるオブジェクトのsrcプロパティに
                         固定文字列又はWEBブラウザーからのレスポンスデータをセットします。
                         このオブジェクトはレスポンスが正常に戻らないと動作できないため
                         通信後のみ設定可能です。
                      7) JavaScriptValue
                         HTML上のID属性で指定されるオブジェクトのvalueプロパティに
                         固定文字列又はWEBブラウザーからのレスポンスデータをセットします。
                         このオブジェクトはレスポンスが正常に戻らないと動作できないため
                         通信後のみ設定可能です。
                    
                    AjaxScriptオブジェクトはブラウザに送られるHTMLでは以下のfunctionと
                    して自動挿入されます。
                     function scriptName(async, data);
                     
                     scriptNameはSCRIPTタグのname属性の値（名前）、
                     asyncはtrueのときは非同期送信（ファンクションは通信が終了しなくても
                     即復帰します）、falseの時は同期送信（通信が終了するまでブラウザは
                     動作しません）として動作します。
                     dataはプロパティ名とその値で構成されるオブジェクトです。
                     
                    そして何らかのイベント時発生時に上記ファンクションをJavaScriptで呼び出します。
                    
                    pirkaでは呼び出しのJavaScriptを自動生成するOnEventJavaScript#getSource
                    メソッドが用意されていますのでJavaScriptを使用しなくても以下の様な記述で
                    呼び出すことができます。

                    //  zipCodeフィールドのonChange属性に自フィールド値をzipCodeとしてajaxTest01を呼び出すJavascriptコードを設定
                    field.setOption("zipCode", "onChange", OnEventJavaScript.getSource("ajaxTest02", true, new RequestData("zipCode")));

                    サンプルとしてpirkaSampleのjp.oarts.pirka.sample.s13#Ajax01、
                    jp.oarts.pirka.sample.s13#Ajax02を参照してください。


            3.2.11 セション
                    通常のWEBアプリケーションではデータはセションに保管します。
                    しかしpirkaではウインドウクラスのメンバ変数は自動的にセションに保存・取得されるため
                    セションを意識せずにWEBアプリケーションを作成することが可能です。
                
                    ある画面から次に表示する画面へのデータの受け渡しもセション経由ではなくnewした次画面の
                    ウインドウオブジェクトのデータ受け渡しメソッドを呼び出すことにより行えます。
                    
                    セションを使用したいとき又は、旧サーブレットモード使用時は以下のメソッドを使用して
                    セションにデータを保管することができます。

                    // セッションに任意のオブジェクトを登録
                    protected void putSession(String keyName, Object object);
                    
                    // セションより指名されたオブジェクトを取得
                    protected Object getSession(String keyName);

                    セションを使用するときのキー名ですが先頭が __PIRKA__ で始まる名前はpirka内部で
                    使用されるため使用しないでください。

                    保管されたオブジェクトはセションが有効中はWEBサーバーのメモリー等に保持されますので
                    あまり大きなオブジェクトは保存しないようにしてください。

                    また、pirkaでは初画面を表示するときはセションハイジャック防止のため
                    セションの再作成を行なっているためセション内のデータは全てクリアされます。
                    
                    他のWEBアプリケーション等からセションを引き継ぎたいときはEntryPointクラスを
                    派生して新たなエントリーポイントを作成することにより可能となります。
		    
		    EntryPointクラスに以下のメソッドをオーバーライドしてfalseを戻すことにより
		    セション再作成は行なわれなくなります。
		    
                    public boolean isClearSessionAtInitScreen();
                    
                    【例】
                    public boolean isClearSessionAtInitScreen() {
                        return false;
                    }


    4.その他
    
        4.1 ログ出力

            pirkaでは特にログを出力しません。
            各アクションメソッド等に自由なロガーを使用してログ出力を行ってください。
            また、アクションメソッド内で発生したExceptionやThrowableは以下仕組みでログ出力すると
            一箇所のみでログ出力を行えるため便利です。
            ・アクションメソッド内でExceptionやThrowableが発生するとフェータルエラー画面が
            　表示さます。この画面はエントリーポイントで独自の画面に変更可能です。
            　また、変更された画面がPirkaFatalErrorWindowインターフェースをインプリメントしていると
            　表示前にsetErrorメソッドが呼び出されます。
            　このメソッドのパラメータとしてThrowableオブジェクトが渡されるのでこのメソッド内で
            　フェータルエラーのログを出力します。


        4.2 Javascript使用時の注意事項
            Javascriptで各コントローラータグのname属性、ID属性、for属性を使用してアクセスを
            行うときには以下の注意が必要です。

            1) ラジオボタンの名前はブラウザに送られる時にはサフィックスが削除されます。
                    <input type="radio" name="selectColor$red" value="red">
                は
                    <input type="radio" name="selectColor" value="red">
                となります。

            2) ループ中の名前にはサフィックスが付加されます。
                サフィックスは『$+ループインデックス』です。
                    <input type="text" name="age">の
                    ループ1回目は<input type="text" name="age$0">
                    ループ2回目は<input type="text" name="age$1">
                となります。
                
                また、ループ階層が2重ループ、3重ループと深くなるとそれに応じてサフィックスも
                付加されます。
                たとえば、3重ループの中に<input type="text" name="age">が存在し一番外側が2回目、
                その内側が5回目、一番内側が8回目だとすると
                <input type="text" name="age$1$4$7">となります。

            3) ループ中に存在するname属性を持つタグのID属性やfor属性もnameと同様のサフィックスが
                付加されます。
                ただし、コントロールメソッドのサフィックス付加指定によりID属性やfor属性に対しては
                サフィックス付加の制御が可能です。


        4.3 旧サーブレットモード

            エントリーポイントの派生クラスでisOldServletModeメソッドをオーバーライドしてtrueを戻すと
            旧サーブレットモードとして動作します。

            旧サーブレットモードを使用するとブラウザのバックボタンで前画面に戻ることができます。
            そのためオンラインショッピングの様なブラウザの機能を使用した自由な画面遷移が
            可能なWEBアプリケーションを作成できますが以下の点で通常モードとは動作が違いますので
            御注意ください。

            1) メンバ変数などの自動セション保存機能は動作しません。
                一般的なサーブレットと同様にデータの保管にはセションを使用してください。

            2) アクションメソッドの戻り値としてnullを戻しても前画面には戻りません。

            3) FORMタグのmethod属性に"post"が設定されているとブラウザーによってはサーバーに
                データを送信する前に警告を表示します。
                これを回避するために旧サーブレットモードではFORMタグのmethod属性に"get"を
                設定してください。


        4.4 JUnitテスト
            
            pirkaで使用されるウインドウオブジェクトはJUnit等を使用したWEBサーバーの
            存在しない環境でのテストを行うことができます。
            
            JUnit使用時の留意点を以下に記します。
            
            1) エントリーポイントとしてOfflineEntryPointを使用します。
                OfflineEntryPointのオブジェクトは以下のように取得します。
                OfflineEntryPoint entryPoint = OfflineEntryPoint.getInstance();
            
            2) OfflineEntryPointのオブジェクトを取得したらセション開始メソッドを
                呼び出してください。
                entryPoint.startSession();
            
            3) テスト中にブラウザで現在のウインドウ内容を表示することもできます。
                デフォルトではWindowsXPでIE6を使用するように設定されていますが、他のOSやブラウザを
                使用するときは以下の様にブラウザ起動コマンドを設定してください。

                //  FireFox
                entryPoint.setDebugBrowserCommand("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
                （FireFoxでは終了時に削除ダイアログボックスを表示しない設定を行う必要があります）

            4) ウインドウオブジェクトを以下の様にnewします。
                PirkaWindow nextWindow = new CtrlTestMenu();    //  メニューウィンドウを作成
            
            5) もし、この画面をブラウザで表示させたければ以下のメソッドで可能です。
                entryPoint.display(nextWindow, 3);  //  ブラウザーで3秒表示
            
            6) ウインドウオブジェクト内のリンクやサブミットボタンのクリックは
                OfflineEntryPoint#actionメソッドを使用してシミュレートすることができます。
                
                以下の例は画面中name=LinkTest10のAタグがクリックされて、その戻り値が次画面で
                あるTest10クラスかJUnitのassertTrueメソッドでチェックし、確認のため
                画面を3秒ほどブラウザで表示しています。
                
                    PirkaRespons nextRespons
                        = entryPoint.action(nextWindow, "LinkTest10", new int[0]);  //  アクション発行
                    assertTrue(nextRespons instanceof Test10);      //  次画面がテスト10画面かチェック
                    nextWindow = (PirkaWindow) nextRespons;
                    entryPoint.display(nextWindow, 3);      //  ブラウザーで表示

            7) 画面でのデータ入力はウインドウオブジェクトよりフィールドマップを取得し
                そのフィールドマップに値を設定することで代行します。
                以下の例では画面からsyuuryouフィールドに100、tankaフィールドに200が入力された
                ことと同じです。
    
                field = nextWindow.getFieldMap();       //  次画面よりフィールドを取り出し
                field.setValue("suuryou", "100");       //  値をセット（画面入力の代行）
                field.setValue("tanka", "200");

            8) 画面に表示されている内容のチェックは入力と同様にウインドウオブジェクトより
                フィールドマップを取得し、そこから値を取り出しassertEqualsメソッド等を
                使用して行ってください。
                
                以下の例ではexecButtonボタンクリックをシミュレーションし計算させ
                その結果表示されるkingakuフィールドの内容が20000かをチェックしています。

                nextRespons = entryPoint.action(nextWindow, "execButton", new int[0]);  //  アクション発行
                assertTrue(nextRespons instanceof Test10);      //  画面が移動していないかのチェック
                nextWindow = (PirkaWindow) nextRespons;
                field = nextWindow.getFieldMap();                   //  画面よりフィールドを取り出し
                assertEquals(field.getValueInt("kingaku"), 20000);  //  表示された結果（金額）が正しいかチェック

            9) サンプルとしてpirkaSampleのjp.oarts.pirka.test.batch.JUnitTestSampleを参照してください。
            
            10) OfflineEntryPointでのテストはいくつかの制限事項が存在します。
                4.5 制限事項を参照してください。


        4.5 制限事項
            
            1) 入力データ
                pirkaでは入力された情報がブラウザーから送られてこないときはそれに対応する
                フィールドの値は更新されません。
                これは、JavaScriptを使用して動的に入力タグをdisableにしたときなどに発生します。
                JavaScript等で入力タグをdisableにしたときはhiddenタグ等にデータを一度コピーして
                サブミットを行う等の処理が必要となります。

            2) JUnitテスト
                JUnitテストで使用される現バージョンのOfflineEntryPointではウインドウオブジェクトへの
                入力データの格納、表示データの取得、アクションメソッド呼び出し以外の以下の処理は
                サポートされていません。
                    ・ファイルアップロード
                    ・動的イメージ
                    ・入力出力文字の自動変換
                    ・Ajax
                    ・別ウインドウ

            3) セッションタイムアウト画面、フェータルエラー画面
            	jp.oarts.pirka.core.app.EntryPoint#getSessionTimeoutWindowメソッド、
            	jp.oarts.pirka.core.app.EntryPoint#getFatalErrorWindow画面メソッドが
            	返すセッションタイムアウト画面、フェータルエラー画面のHTMLにはformタグを
            	記述すると動作が保障されません。
            	
            	
