サポート > Wagby Developer Network(R8) > Javaを用いたカスタマイズ > ボタンを追加し、独自処理を行わせる

独自ボタンのコードをJavaで記述する方法を説明します。

Designerでの定義方法

詳細表示画面に独自のボタンを用意するとともに、そのボタンの処理を行なうロジックをJavaで記述する例を説明します。

図1にあるように "Javaソースコードの設定 > カスタマイズ用の雛形クラスを出力する" を有効にしてください。

図1 独自ボタンを定義する

Myクラスの編集

カスタマイズ用の雛形クラスを出力するを有効にしたため、MyShowCustomerController.java が生成されます。

package jp.jasminesoft.wagby.controller.customer;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        // you can access 'p.o' object as primary key.
        return do_show(p);
    }
}

開発者はこのコードを編集し、次のフォルダに保存してください。次回以降のビルド処理で、このカスタマイズしたクラスが有効になります。

customize/java/jp/jasminesoft/wagby/controller/customer/MyShowCustomerController.java
上の例はパッケージ名が「jp.jasminesoft.wagby」の場合です。パッケージ名の部分は適切に読み替えてください。

主キーを確認する

p.o にはモデルの主キーがセットされています。この内容を確認してみましょう。

package jp.jasminesoft.wagby.controller;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
	// 主キーの値の確認
	System.out.println(p.o);
	// 主キーの型の確認
	System.out.println(p.o.getClass().getName());

        return do_show(p);
    }
}
  • 独自ボタンを押下すると、do_original メソッドが呼び出されます。
  • return do_show(p); は、もともと自動生成されていたコードです。詳細画面処理そのものを行います。

ビルド後にアプリケーションを起動し、詳細画面に用意された独自ボタンを押下すると主キーの値と型の情報がコンソールに表示されます。

この例では出力結果がコンソールに表示されるため、アプリケーションの起動は Designer からではなく、直接 wagbyapp/bin/startup.bat を実行するとよいでしょう。

別のパラメータを受け取る

p.request オブジェクトを使うことで、通常のサーブレットプログラミングのように Web フォームからパラメータを受け取るコードを書くこともできます。

package jp.jasminesoft.wagby.controller;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        // 別のパラメータを受け取る。
        String param1 = p.request.getParameter("param1");

        // 何かの処理を行う。
        ...

        return do_show(p);
    }
}

別の画面へ遷移する

別の画面へ遷移させることができます。次の例は、メニュー画面へ遷移させた例です。

package jp.jasminesoft.wagby.controller;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        ...
        return "redirect:/mainMenu.do";
    }
}

別の画面へ遷移し、メッセージを表示する

p.errors オブジェクトにエラー/警告/情報メッセージをセットすることもできます。

package jp.jasminesoft.wagby.controller;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        ...
        p.errors.addJfcinfo(
            getJFCErrorManager().getJfcinfo("mymessage", p.locale));
        return do_show(p);
    }
}

この場合 customize/resources/myerrormsg_ja.properties.UTF8 ファイルにメッセージを記載し、保存します。 接頭語 my が付与されています。

mymessage=テストです。

メッセージの表示は、エラーメッセージ部が行います。 設定できる種別は error,warn,info が用意されています。

複数のボタンに対応する

複数のボタンを用意した場合は、p.action の値によって処理を振り分けるコードを実装してください。 p.action には「イベント名」がセットされています。

この例では、二つのオリジナルボタンを用意しています。イベント名はそれぞれ Original1 ,Original2 としています。
package jp.jasminesoft.wagby.controller;
...
@Controller
public class MyShowCustomerController
    extends ShowCustomerController
{
    @Override
    public String do_original(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        if ("Original1".equals(p.action)) {
            return do_myprocess1(p);
        } else if ("Original2".equals(p.action)) {
            return do_myprocess2(p);
        }
        return null;
    }

    public String do_myprocess1(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
        return null;
    }

    public String do_myprocess2(ActionParameter p)
        throws IOException, ServletException, SecurityException
    {
         return null;
    }
}