LaBee Framework チュートリアル

LaBee FrameworkはJavaによるWebシステム開発のデファクトスタンダードを目指す、ゼロから作られた国産のJavaフレームワークです。 海外製フレームワーク特有の難解さや情報不足による工数や人員の増大を解消しJavaのWeb開発を効率化する為に作られました。 LGPLライセンスでソースコードをオープンソース公開しており、個人・企業問わずどなたでも無償で利用出来ます
https://www.bee-wkspace.com/
![press.jpg](https://qiita-image-store.s3.amazonaws.com/0/137533/9ec50bce-b5dd-3ed3-f1f3-c6f5e9a4d106.jpeg)


#チュートリアル 

##LaBeeFramework MVC概要 

LaBeeFrameworkの処理機構はMVC(Model,View, Control)デザインパターンに準じてをおり、1画面の処理を構成するロジックの役割は
以下の構成になり、基本的に3つの役割で1つの固まりとして扱います。 

|役割モデル  |実装呼称  |概要 |
|:--|:--|:--|
|Model|ビーン(Baan)|例として画面を構成するテキストボックス値や検索結果データ等の各データをクラスパラメータに持つJavaビーンズオブジェクトです、 データ保持を担当します。各パラメータはセッター・ゲッターメソッドを実装ます。 Serializableインターフェースを継承宣言する必要があります。 |
|View|JSP|Web画面を構成するHTMLにJavaコードを付加し画面表示を担当します。LaBeeFrameworkカスタムタグを使用してテキストボックスやセレクトボックス等 の入出力を作成します。 |
|Controler|ビジネスロジック(Blogic)|例としてボタン押下等のイベントに対して検索処理を行なうなどの実処理を担当します。ビーンに結果データを格納しレスポンスを返します。 画面からの要求に対し呼び出すビジネスロジックを選別する等、実際のコントローラー処理を行なうサーブレットはLaBeeFramework内で 吸収している為、ロジック実装者は呼び出されるビジネスロジックのみの実装に専念出来ます|

それぞれのクラスのクラス名、JSP名の命名規則はScreenDefine.csvで定義した画面IDを頭に付ける必要があります、個別の命名規則は
各項を参照ください。

##画面設定ファイル編集 
画面情報を定義するScreenDefine.csvを設定します。今回はSampleという画面IDの情報を追加定義します。
テキストエディタで編集する場合はカンマ数に気をつけます。エクセルで編集するとカラム編集が見やすくなります。
(CSVの各カラムにはダブルクォーテーションは使用しません) 

~~~
$SCREEN_ID,SCREEN_NAME,LABEL_DIV,LABEL_CD,SSL,JSP(pc),JSP (smart phone),JSP (tablet),ADD_SCRIPTS,ADD_CSS,OPTION1,OPTION2,OPTION3,OPTION4
Sample,サンプル,,,,jsp/Sample.jsp,,,,,,,,    
~~~

##ビーン(Bean)作成 

ビーンクラスを作るにはcom.bee_wkspace.labee_fw.app.base.AppBaseBeanを継承し、
Serializableインターフェースを継承宣言したクラスを作成します。格納パッケージの指定場所制限はありません。
ビーンクラスの命名はScreenDefine.csvで定義した画面ID + Beanを規則とします。
myNameという文字列パラメータを持つサンプルビーンクラスの雛形は以下になります。 

~~~
package sample.bean.web;
import java.io.Serializable;
import com.bee_wkspace.labee_fw.app.base.AppBaseBean;
/**
* サンプルビーンクラス 雛形
*/
public class SampleBean extends AppBaseBean implements Serializable {
    private String myName; 
    /**
     * コンストラクタ。
     */
    public SampleBean() {
        super();
    }
    
    public void setMyName(String value) {
        myName = value;
    }
    
    public String getMyName() {
        return myName;
    }
}
~~~


##ビジネスロジック(Blogic)作成 
ビジネスロジッククラスを作るにはcom.bee_wkspace.labee_fw.app.base.AppBaseBlogicを継承し、 総称型宣言にビーンクラスを定義します。
格納パッケージはLaBeeFramework.propertiesのビジネスロジック格納パッケージBLOGIC_PACKAGE項目で 定義したパッケージ配下に任意のパッケージ階層を作り、そこにクラスを作ります。 ビジネスロジッククラスの命名はScreenDefine.csvで定義した画面ID + Blogicを規則とします。
startという初期表示イベント処理を持つサンプルビジネスロジッククラスの雛形は以下になります。 

~~~
package sample.blogic.web;
import  sample.bean.web.SampleBean;
import com.bee_wkspace.labee_fw.app.base.AppBaseBlogic;
import com.bee_wkspace.labee_fw.core.annotation.FwBlogic;
import com.bee_wkspace.labee_fw.core.annotation.FwExeMethod;
import com.bee_wkspace.labee_fw.core.context.ResponseContext;
import com.bee_wkspace.labee_fw.exception.FwException;
/**
 * サンプルビジネスロジック雛形
 */
@FwBlogic(beanReuse = true)
public class SampleBlogic extends AppBaseBlogic<SampleBean> {
    /**
     * コンストラクタ。
     */
    public SampleBlogic() {
        super();
    }
    
    /**
     * 初期表示処理イベント。
     */
    @Override
    @FwExeMethod
    public ResponseContext start() throws FwException {
        try {
            bean.setMyName("LaBeeFramework");
        } catch (Exception e) {
            throw new FwException(e);
        }
        return responseContext;
    }    
}
~~~

###ビジネスロジック実装規則

- ビジネスロジックには必ず@FwBlogicアノテーションを付加しbeanReuseパラメータを設定する必要があります。
- beanReuseパラメータはビーン情報の永続保持フラグです、trueに設定した場合は1度生成したビーンオブジェクトをメモリ上で保持し、使いまわします、ビーンパラメーラ内容も全て永続保持される為、画面HTML側でhiddenでデータを持ちまわる必要なく前回のデータをそのまま再利用出来ます。任意に保持データを削除する事も可能です。falseに設定した場合は毎回ビーンオブジェクトを生成し内容は保持されず破棄されます。
- 再利用ビーンはセッションオブジェクトに保持されますが、セッションタイムアウト時はビーンオブジェクトをLaBeeFrameworkがシリアライズしファイル化し保存、復元する為、セッションタイムアウトに関わらず永続保持が保証されます
- ビジネスロジックのイベント処理メソッドには @FwExeMethodを付加し、ResponseContextを戻す必要があります。
- イベントメソッド処理はLaBeeFrameworkのコントローラ処理で自動でイベントドリブン呼び出しされます。
- startメソッドは画面初期処理イベントとして親クラスで定義されており、呼び出し先が指定されていない場合はデフォルト実行される。
- responseContextは親クラスで定義されており、何も設定しない場合はデフォルトでJSP画面へフォワード遷移する。
- ビーンを使用しない場合はAppBaseBlogicの代わりにAppBaseNotBeanUseBlogicを継承し総称型を設定しない。
- ポップアップ画面ビジネスロジックの場合はAppBaseBlogicの代わりにAppPopupBaseBlogicを継承する。 


##JSP作成 
JSPを作るにはScreenDefine.csvで定義した画面ID + ".jsp"を命名規則とし、JSPパスで定義した ディレクトリパスにjspファイルを作成します。
jspを格納するディレクトリトップはWEB-INFとなり、この配下に 任意に階層を作りjspを配置する。
SampleBeanを受けるサンプルjspの雛形は以下になります。 

~~~
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page session="false"%>
<%@ taglib prefix="LaBee"  uri="/WEB-INF/lib/LaBeeFramework.jar"%>
<jsp:useBean id="bean" class=" sample.bean.web.SampleBean" scope="request" />
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <LaBee:header requestScope="${requestScope}"/>
</head>
<body>
    <form name="mainForm" method="post" action="ctrl">
    
            ${bean.myName}
    
    </form>
</body>
</html>       
~~~
###JSP実装規則

- LaBeeFrameworkカスタムタグを読み込む定義部を必ず記載する。
   <%@ taglib prefix="LaBee" uri="/WEB-INF/lib/LaBeeFramework.jar"%>
- 受信ビーン定義部を記載する(ビーンを使用しない事も出来る)
    <jsp:useBean id="bean" class="sample.bean.web.SampleBean" scope="request" />
- headタグ内で必ずLaBeeFrameworkヘッダ処理カスタムタグを実行する。
    <LaBee:header requestScope="${requestScope}"/>
- formタグ名は基本的に"mainForm"を使用する。actionは基本的に"ctrl"を使用する。
    (カスタマイズする知識があれば変更可) 

##画面呼び出し 

画面呼び出しイベントはターゲット(tgt)と実行処理(exe)のパラメータをフォームにセットして サブミットするかURLに付加します。またイベントの起動引数を設定する事も出来ます。 

|パラメータ名  |論理パラメータ名   |概要 |設定例 |
|:--|:--|:--|:--|
|tgt|ターゲット|実行するビジネスロジックを特定する値。実際に設定する値はLaBeeFramework.propertiesのビジネスロジック格納パッケージ BLOGIC_PACKAGE項目で設定したパス配下からの、パッケージ階層 + "." + 画面IDになります。例としてlabee.homepage.blogic.web.SampleBlogicというビジネスロジッククラスの場合で tgt設定値はweb.Sampleとなります。 |web.Sample |
|exe|実行イベント処理|指定したビジネスロジック内のイベント処理メソッド名を指定します。未指定の場合はデフォルトでstartメソッドが実行されます。|start|
|p1,p2,p3|起動引数1～3|イベント処理メソッドへ渡す任意パラメータ引数です。最大3つまで指定可能です、番号が若い方が優先され、p2を指定してもp1が未指定の場合は p2値は無視されます。起動引数パラメータを送信する場合はイベント処理メソッドにも同じパラメータ数の文字列引数を受ける様にメソッド定義する必要があります。 |任意値|
|screen_id |画面ID |ビジネスロジック、ビーンを必要としない場合はscreen_idに画面IDを指定する事でScreenDefine.csvに指定した画面IDのJSPへ直接遷移します。 この場合はjsp側ではビーンを参照使用出来ません。tgtとexeを指定してもscreen_id設定が優先されます。 |画面ID |

###画面呼び出しURL例
http://localhost:8080/LaBee/ctrl?tgt=web.Sample&exe=start

###JSP直接画面呼び出しURL例
http://localhost:8080/LaBee/ctrl?screen_id=testJsp

- 例中のURLのホスト名、ポート、コンテキストパスは環境によって違いますので任意変更してください。
- 実際の画面呼び出しはLaBeeFrameworkのカスタムタグを利用して実行するので手動でURLを作成して送信する必要はありません。