LastaFluteのEclipseコード補完
- どう打ち込めばいい?
- DIフィールドの補完 (_lad...)
- Executeメソッドの補完 (_laex...)
- プロパティフィールドの補完 (_lap...)
- BeanのtoString()の補完 (_latostring) ★
- バリデーションの補完 (_lav...)
- 補完テンプレートの環境構築
どう打ち込めばいい?
もし補完テンプレートが設定されていなければ、まず設定しましょう。
補完文字列を打ってcontrol+space補完
エディター上で補完文字列を打ってcontrol+space補完すると、コードが補完されます。
e.g. DBFluteオリジナルの_llの補完テンプレート @Java
memberBhv.selectList(_ll) // _ll, control+space, enter
↓↓↓
memberBhv.selectList([var] -> {
[var].[object]
})
補完文字列の階層構造
(ある程度)補完文字列に階層構造があるので、何をしたいのか?を狙って打ち込んできましょう。
- _lad...
- DIフィールドの補完 :: e.g. _ladany, _ladconfig, _ladreq, ...
- _laex...
- Executeメソッドの補完 :: e.g. _laexhtml, _laexjson
- _lap...
- プロパティフィールドの補完 :: e.g. _laprop, _lapvalidclass, ...
- _latostring
- BeanのtoString()の補完 :: Form/Body, Resultクラスなどにて
- _lav...
- バリデーションの補完 :: e.g. _lavclienterr, _lavmessages, ...
Action開発者にオススメ補完3つ!
jfluteが思う「少なくともこれだけは使いこなして欲しい」と思う補完は...
- _ladany
- DIフィールドの補完 :: @Resource付きのprivateフィールド
- _laprop
- プロパティフィールドの補完 :: publicプロパティの補完
- _latostring
- BeanのtoString()の補完 :: Form/Body, Resultクラスなどにて
DIフィールドの補完 (_lad...)
任意のDIフィールド (_ladany) ★★★
_ladany (LAstaFlute の Di の ANYthing)
e.g. 任意のDIフィールドを補完 @Java
public class SeaAction extends HarborBaseAction {
_lada... // control+space, enterどーん!
↓↓↓
@Resource
private [component] anything;
_lad系の一番上に出てくるので、_ladだけで補完してenterでもOKです。
とにかくこれだけでも覚えていれば、DIフィールドの宣言がだいぶ楽になるでしょう。
LastaFluteコンポーネントのDIフィールド (_lad...)
LastaFluteが提供しているコンポーネントを狙って補完できます。(なんとかManagerは大体揃ってます)
- _ladasync
- AsyncManager
- _ladconf
- [App]Config ▲▲ (e.g. コンフィグ値を取得するとき)
- _ladcookie
- CookieManager
- _ladjob
- JobManager
- _ladjson
- JsonManager
- _ladmessage
- MessageManager
- _ladpostbox
- Postbox ▲ (e.g. メールを送信するとき)
- _ladprimcipher
- PrimaryCipher ▲
- _ladrequest
- RequestManager ▲
- _ladresponse
- ResponseManager
- _ladsession
- SessionManager
- _ladtemplate
- TemplateManager
- _ladtime
- TimeManager ▲▲▲ (e.g. 現在日時を取得するとき)
- _ladtransaction
- TransactionStage ▲ (e.g. トランザクションを発行するとき)
▲マークは、業務クラスの実装でもよく使うかもしれないコンポーネントなので、知っておくと良いでしょう。 また、一個一個覚えてなくも補完できるということだけ知っておけば、必要になったときに補完からManagerクラスを探すことができます。 (この補完テンプレートがちょっとしたドキュメントになります)
Executeメソッドの補完 (_laex...)
Execute Method で HtmlResponse (_laexhtml)
_laexhtml (LAstaFlute の EXecute Method の HTMLResponse)
e.g. HtmlResponseのExecuteMethodを補完 @Java
public class SeaAction extends HarborBaseAction {
_laexh... // control+space, enterどーん!
↓↓↓
@Execute
public HtmlResponse [method](Integer [object]Id, [form]Form form) {
return asHtml(path_[object]);
}
// []部分がtabで移動して入力できる箇所、後は要件に合わせて好きなように調整
Execute Method で JsonResponse (_laexjson)
_laexjson (LAstaFlute の EXecute Method の JSONResponse)
e.g. JsonResponseのExecuteMethodを補完 @Java
public class SeaAction extends HarborBaseAction {
_laexj... // control+space, enterどーん!
↓↓↓
@Execute
public JsonResponse<[result]> [method](Integer [object]Id, [body]Body body) {
return asJson([result]);
}
// []部分がtabで移動して入力できる箇所、後は要件に合わせて好きなように調整
プロパティフィールドの補完 (_lap...)
publicプロパティのフィールド (_laprop) ★
_laprop (LAstaFlute の (Public) PROPerty)
e.g. publicプロパティのフィールドを補完 @Java
public class SeaResult {
_lapr... // control+space, enterどーん!
↓↓↓
/** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
@Required
public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];
// []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
// デフォルトで@Requiredになるが、必須じゃなければ削除してOK
JavaDocコメントも補完され、e.g.デフォルト値の欄もあるので、ぜひ書いていきましょう。
補完後に修正抜けあっても目立つように、変数部分にxxxを付けています。
@ValidなPartクラスのフィールド (_lapvalidclass)
_lapvalidclass (LAstaFlute の Property の VALID CLASS)
e.g. @ValidなPartクラスのフィールドを補完 @Java
public class SeaResult {
_lapvalidcl... // control+space, enterどーん!
↓↓↓
/** [xxx_object_description_xxx] */
@Required
@Valid
public [xxx_PartName_xxxPart] [xxx_partName_xxx];
/**
* @author jflute
*/
public static class [xxx_PartName_xxx]Part {
/** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
@Required
public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];
}
// []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
// デフォルトで@Requiredになるが、必須じゃなければ削除してOK
補完なしで定義するとなるとかなり面倒な構成ですが、特にJSONクラスでは定義することも多いと思われるので、覚えておくと良いでしょう。
@ValidなPartクラスのListフィールド (_lapvalidlist)
_lapvalidlist (LAstaFlute の Property の VALID LIST)
e.g. @ValidなPartクラスのListフィールドを補完 @Java
public class SeaResult {
_lapvalidli... // control+space, enterどーん!
↓↓↓
/** [xxx_list_description_xxx] */
@NotNull
@Valid
public List<[xxx_PartName_xxxPart]> [xxx_partListName_xxx];
/**
* @author jflute
*/
public static class [xxx_PartName_xxx]Part {
/** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
@Required
public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];
}
// []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
// デフォルトで@Requiredになるが、必須じゃなければ削除してOK
こちらもJSONクラスではおなじみの構成なので、覚えておくと良いでしょう。
BeanのtoString()の補完 (_latostring) ★
_latostring (LAstaFlute の TOSTRING)
e.g. toString()を補完、Form,Body,ResultなどのBeanクラスにて @Java
public class SeaResult {
...
_lato... // control+space, enterどーん!
↓↓↓
@Override
public String toString() {
return Lato.string(this);
}
Form,Body,Resultなどの入れ物クラスに付けましょう。 何かとデバッグログで出力される機会があります。中のデータを出力しておくことで、デバッグに役立つことが多々あります。
外側クラスだけに付けておけば、ネストしたクラスの内容も一緒に出力されます。
バリデーションの補完 (_lav...)
クライアントエラーのgroups属性 (_lavclienterr)
_lavclienterr (LAstaFlute の Validation の CLIENTERRor)
e.g. バリデーションアノテーションのクライアントエラーのgroup属性を補完 @Java
public class SeaResult {
@Required(_lavcli...) // control+space, enterどーん!
public String sea;
↓↓↓
@Required(groups = ClientError.class)
public String sea;
システム項目のバリデーションアノテーションに付けるお決まりのgroups属性を補完できます。
(ただ、特に汎用的なJSON APIだとバリデーションエラーなのかクライアントエラーなのか区別せずに実装することも多いので、ちょっとレアな機能かもしれません)
validate()のmoreValidationLambda (_lavmessages)
_lavmessages (LAstaFlute の Validation の CLIENTERRor)
e.g. バリデーションメソッドのmoreValidationLambdaを補完 @Java
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, moreValidationLambda) // 引数名が補完されて...
}
↓↓↓
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, _lavme...) // control+space, enterどーん!
}
↓↓↓
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, messages -> {}); // セミコロン入れておしまい...?
}
↓↓↓
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, messages -> { // moreValidateするなら改行入れて続きを
_lavmore... // 次の補完に続く
});
}
手打ちで引数名を意識してLambdaを書くのはわりと大変なので、補完できるとスムーズに書けます。
validate()のmoreValidationLambda続き (_lavmorevalidate)
_lavmorevalidate (LAstaFlute の Validation の MOREVALIDATE)
e.g. バリデーションのmoreValidationLambdaのmoreValidate()を補完 @Java
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, messages -> {
_lavmore... // control+space, enterどーん!
});
}
↓↓↓
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, messages -> {
moreValidate([localVar], messages) // localVarは form か body に
});
}
↓↓↓
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
validateApi(body, messages -> {
moreValidate(body, messages) // command+1 で Create method
});
}
private void moreValidate(SeaBody body, HangarMessages messages) {
// command+1から生成されるメソッド、ここで実装の続きを
}
お決まりのmoreValidate()メソッドの生成、先にメソッド呼び出しを補完してから、Eclipse標準のcommand+1補完でメソッドを作成すると良いでしょう。
validate()のvalidationErrorLambda (_lavreterrorhtml)
_lavreterrorhtml (LAstaFlute の Validation の RETurn ERROR HTML)
e.g. バリデーションのvalidationErrorLambdaのasHtml()を補完 @Java
@Execute
public HtmlResponse index(SeaForm form) {
validate(form, messages -> {}, validationErrorLambda) // 引数名が補完されて...
}
↓↓↓
@Execute
public HtmlResponse index(SeaForm form) {
validate(form, messages -> {}, _lavret...) // control+space, enterどーん!
}
↓↓↓
@Execute
public HtmlResponse index(SeaForm form) {
validate(form, messages -> {}, () -> {
return asHtml([path_]); // すぐ control+space で path_ の続きを補完
}); // セミコロンも忘れずに
}
HtmlResponseのときのお決まりのasHtml()呼び出し、ぜひ補完で実装しましょう。
補完テンプレートの環境構築
DBFluteの補完テンプレートxml
DBFluteの補完テンプレートを入れましょう。 (ワークスペースの設定なので、workspaceディレクトリごとに設定作業する必要があります)
LastaFluteプロジェクトであれば、プロジェクト直下もしくは[app]-baseプロジェクトの etc/tools/eclipse 配下に、java-editor-templates.xml が置いてあります。
e.g. Eclipseのエディターテンプレートのxmlファイル @Directory
[app]-base
|-...
|-etc
| |-tools
| | |-eclipse
| | | |-code-formatter-profile.xml
| | | |-java-editor-templates.xml
このファイルを、まるごと入れ替え方式 で import しましょう。
まるごと入れ替え方式のやり方
importするテンプレートファイルに標準テンプレートも含まれてる場合は、まるごと入れ替え方式で取り込みます。 DBFluteの補完テンプレートは、基本的にこの方式を想定しています。
まず、メニューの Preferences の Java - Editor - Templates で設定画面を開きます。
既存のテンプレートを何か一つ選択して、(Macなら)command+A で全選択します(全選択できればやり方は何でもOK)。 そして、全選択した状態で Remove を押すと既存のテンプレートがすべて消えるので、その状態で Import... を押して、ファイル選択ダイアログでimport対象のxmlファイルを選択します。
期待されているテンプレートが設定されたことを確認して Apply すれば完了です。試しに近くのクラスで補完をしてみましょう。