ログ日記

作業ログと日記とメモ

ゼロから始めるGWT その3

その2の続き。


テストが通っているので、あとは表示するだけ。
Hoge.javaにコードを追加。

・・・
    private final CalcServiceAsync calcService = GWT.create(CalcService.class);
    public void onModuleLoad() {
・・・
        final Button calcButton = new Button("計算");
        final TextBox field1 = new TextBox();
        final TextBox field2 = new TextBox();
        final Label errorCalcLabel = new Label();
        calcButton.addStyleName("sendbutton");
        RootPanel.get("calcFieldsContainer").add(field1);
        RootPanel.get("calcFieldsContainer").add(field2);
        RootPanel.get("calcButtonContainer").add(calcButton);
        RootPanel.get("errorCalcLabelContainer").add(errorCalcLabel);

        final DialogBox calcBox = new DialogBox();
        calcBox.setText("足し算ダイアログ");
        calcBox.setAnimationEnabled(true);
        final Button calcCloseButton = new Button("閉じる");
        final HTML calcResponseLabel = new HTML();
        VerticalPanel calcVPanel = new VerticalPanel();
        calcVPanel.addStyleName("dialogVPanel");
        calcVPanel.add(calcResponseLabel);
        calcVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
        calcVPanel.add(calcCloseButton);
        calcBox.setWidget(calcVPanel);

        calcCloseButton.addClickHandler(new ClickHandler(){

            @Override
            public void onClick(ClickEvent event) {
                // TODO 自動生成されたメソッド・スタブ
                calcBox.hide();
                calcButton.setEnabled(true);
                calcButton.setFocus(true);
            }

        });
・・・
        class CalcHandler implements ClickHandler {

            @Override
            public void onClick(ClickEvent event) {
                // TODO 自動生成されたメソッド・スタブ
                try {
                    int a = Integer.parseInt(field1.getText());
                    int b = Integer.parseInt(field2.getText());

                    calcService.calc(a, b, new AsyncCallback<Integer>(){

                        @Override
                        public void onFailure(Throwable caught) {
                            // TODO 自動生成されたメソッド・スタブ
                            error(caught.getMessage());
                        }

                        @Override
                        public void onSuccess(Integer result) {
                            // TODO 自動生成されたメソッド・スタブ
                            calcBox.setText("計算結果");
                            calcResponseLabel.removeStyleName("serverResponseLabelError");
                            calcResponseLabel.setHTML("Result:" + result);
                            calcBox.center();
                            calcCloseButton.setFocus(true);
                        }

                    });
                } catch (NumberFormatException e){
                    error(e.getMessage());
                }
            }
            private void error(String msg){
                calcBox.setText("エラー");
                calcResponseLabel.addStyleName("serverResponseLabelError");
                calcResponseLabel.setHTML(msg);
                calcBox.center();
                calcCloseButton.setFocus(true);
            }

        }
        CalcHandler ch = new CalcHandler();
        calcButton.addClickHandler(ch);

これだけだとNot Foundエラーが出るので、サーブレットの登録をする。
war/WEB-INF/web.xml に追加。

  <servlet>
    <servlet-name>calcServlet</servlet-name>
    <servlet-class>hoge.server.CalcServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>calcServlet</servlet-name>
    <url-pattern>/hoge/calc</url-pattern>
  </servlet-mapping>

これで、Eclipseのサーバーが立ち上がっているなら赤い四角いボタンを押して一度停止してから再び「実行」→「Webアプリケーション」で実行してブラウザをリロードする。
これでやっと足し算フォームが完成した。


あとは赤いGアイコンでコンパイルしてwarディレクトリを zip -r して tomcat のwebappsディレクトリにコピーしてサーバー側でも確認。長かった。




色々面倒くさくて疲れた…。
Eclipseが重いのは何とかならないもんかねぇ。ハードウェアスペックを上げるしかないのかな。
特にメソッド候補を表示する時が重くて、キー入力が止まって綴りが入れ子になったりするのは勘弁してほしい。
慣れたら早く書けるようになるんだろうか。
エラーや警告をクリックしていくだけでコードができていく様やAjaxをまったく意識せずにGUIのようなWebアプリが作れるのは凄いと思ったので、引き続き練習しておこうかな。