Happy Man

mash-uppy

ExtGWTでMVC (その6)

このタイトルは、今回で終わりにしようと思います。
MVC以外にもチョロチョロと書きたいことがあるので。。。
というわけで
最後は、イベント駆動について補足です。
1.同じViewに配置されているコンポーネント間のデータの受け渡しは、
イベントよりはsetXXXXで十分事足りる。
スマン、省略。。。
2.複数のView間でのデータの受け渡しは、
イベント駆動を使うと楽。
例えば、Tableの1レコードがCar(extends BaseTreeModel)で、
選択状態が変わった場合のイベント発火の手順

TableBinder<Car> binder = new TableBinder<Car>(table, store);
binder.addSelectionChangedListener(new SelectionChangedListener<ModelData>() {
public void selectionChanged(SelectionChangedEvent se) {
Car c=(Car) se.getSelectedItem();
if (c!=null) {
//EVENT_FOOというイベントに選択されているCarオブジェクトを積んだイベントオブジェクトを生成
AppEvent evt = new AppEvent(App.EVENT_FOO, c);

[…]

eclipseでのjavadoc

もう皆様、ご存知かと思いますが、
viewでjavadocを見ることができます。
手順は、以下の通りです。
1.eclipseメニューでダイアログを開きます。

2.ダイアログでjavadocを選ぶと、ビューにJavadocタブが追加されます。

使い方は、簡単で
編集中のコードの中で
クラス名やメソッド名をマウスで選ぶだけで
先ほどのjavadocタブにAPIが表示されるようになります。
javadocには、クラス名やメソッド名の説明だけでなく
使用例が書かれていることもあり、
時々、「おっ」ということもあり、意外と便利です。

GWT+TOMCAT考

GWT+TOMCAT(weblogicなどj2eeコンテナも含む)環境で
システムを構成するとしたら
サーバ側のフレームワークは、strutsのような主に画面遷移を司るものは不要で
hibernateのようなDBアクセス周りだけで
十分ではなかろうかと思っています。
なぜかというと
GWT=jsによるアプリケーション(画面)というのがメインになる訳です。
もうお分かりですね。
jsによるアプリケーション
って
ajaxを使うことによって画面遷移をなくすことができる訳です。
#セキュリティネタが加わると微妙かもしれませんが。。。。
システム構築時には
フレームワークの選定のタスクがあるくらい
フレームワークな考えが重要視される今日この頃ですが
1.ajaxを使う
2.railsな考え
特に「Convention over Configuration」(設定より規約)
に勢いをつける意味も含めて、
strutsのような設定祭りは、無くなればいいかなとか
画面遷移を扱うフレームワークは不要になってくれればなと。。。。

ExtGWTでMVC (その5)

その4では、テスト用で作ったCarのリストをTableに表示した訳ですが
今回は、サーバからTable表示用の一覧を取得します。
新しくAppView2.javaを作成します。
AppView2は、PagingToolBarを持っていて
結果を1ページあたり10件ごと表示します。
まず、はじめに
新規にGWTリモートサービスを作成します。
#eclipse+cypal使っているだろうから。。。
AppRemoteService.java
AppRemoteServiceAsync.java
AppRemoteServiceImpl.java
作成したAppRemoteServiceに以下のインターフェースを追加します。
AppRemoteServiceAsyncには自動でメソッド追加されているはず。
このリターンやらパラメータが肝ですかね。
conditionは検索条件みたいなイメージです。

public PagingLoadResult<Car> getRemoteCars(Car condition, PagingLoadConfig config);

#とりあえずその2で作成したAppController.javaで使われている
#AppViewをAppView2に変更してください。
で、以下が、Remote+Paginationなテーブルです。
AppView2.java

package com.gethapp.sample.mvc.client;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.binder.TableBinder;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.event.TableEvent;
import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.mvc.View;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.PagingToolBar;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.table.DateTimeCellRenderer;
import com.extjs.gxt.ui.client.widget.table.Table;
import com.extjs.gxt.ui.client.widget.table.TableColumn;
import com.extjs.gxt.ui.client.widget.table.TableColumnModel;
import com.extjs.gxt.ui.client.widget.table.TableItem;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;

public class AppView2 extends View {
//1ページあたりの表示数
private static final int PAR_PAGE=10;

private Viewport v;
[…]

« Previous PageNext Page »