Happy Man

mash-uppy

GAEJでMVC+S(part5)

先のGAEJでMVC+S(part4)のMainView#setBrowseNodeIdで使っている
MainController.javaを記述します。

package com.gethapp.gae.sample.mvc.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class MainController {
//コントローラから利用するサービス
private final AmazonServiceAsync amazonService = GWT.create(AmazonService.class);

private static MainController me;
private MainController() {}
public static synchronized MainController getInstance() {
if (me==null) {
me=new MainController();
}
return me;
[…]

GAEJでMVC+S(part4)

MainVIewを仕上げます。
ちょっと、前置き
GWT1.6以前は、
イベント処理を担当するのは一般的には
XXXXListenerでしたが、
1.6では
YYYYHandlerに変更されています。
HistoryListenerもDeprecatedになって
ValueChangeHandlerに置き換わっています。
—-
MainView.javaです。
変数link0やlink1やbuttonを押すと
Historyとしてtokenが一つ追加されます。
その追加によってValueChangeEvent(イベントの中の値はtoken=browseNodeId)が発生し、
public void onValueChange(ValueChangeEvent)
→public void setBrowseNodeId(String)
→MainController.getInstance().call(browseNodeId, loadCallback);
→loadCallback
の順番で処理が動くといった感じです。

package com.gethapp.gae.sample.mvc.client;

import java.util.Iterator;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;

public class MainView extends VerticalPanel implements ValueChangeHandler<String> {
private static final String INIT="INIT";
private static MainView me;

private Label label=new Label();//結果表示用

private MainView() {
Hyperlink link0=new Hyperlink("ジャンル別", "465610″);
[…]

GAEJでMVC+S(part3)

今、Sにあたるものには
AWSのBrowseNodeLookupを考えています。
コードを参考にした方がイメージしやすいと思います。
AmazonService.java

package com.gethapp.gae.sample.mvc.client;

import com.google.gwt.user.client.rpc.RemoteService;

public interface AmazonService extends RemoteService {
BrowseNode browseNodeLookup(String browseNodeId);
}

引数のbrowseNodeIdからそのIdに関するBrowseNodeを
取得できるサービスです。

非同期呼び出し用のAmazonServiceAsync.java

package com.gethapp.gae.sample.mvc.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface AmazonServiceAsync {
void browseNodeLookup(String browseNodeId, AsyncCallback<BrowseNode> callback);
}

そして最後に、BrowseNodeクラス

package com.gethapp.gae.sample.mvc.client;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class BrowseNode implements Serializable {

private String browseNodeId="";//ブラウザノードID
private String name="";//名前

private List<BrowseNode> children=null;//ノード配下の子ノード

public BrowseNode() {
//
}

public void addChild(BrowseNode arg) {
if (children==null) children=new ArrayList<BrowseNode>();

children.add(arg);
}

public void setBrowseNodeId(String […]

GAEJでMVC+S(part2)

eclipseで新規プロジェクトを作成した後
はじめに
Application.javaとApplication.html
にはサンプルコードが記述されているので
コードを修正(ほぼ削除)しておきます。

package com.gethapp.gae.sample.mvc.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;

public class Application implements EntryPoint {
public void onModuleLoad() {
RootPanel.get().add(MainView.getInstance());
}
}

Application.htmlは、body部分を以下の様の修正して下さい。

<body>
<iframe src="javascript:"" id="__gwt_historyFrame" tabIndex='-1′ style="position:absolute;width:0;height:0;border:0″<>/iframe>
</body>

次に、Application.java#onModuleLoadで呼び出している
MainView.javaを用意します。
とりあえず、VerticalPanelを継承しておきます。

package com.gethapp.gae.sample.mvc.client;

import com.google.gwt.user.client.ui.VerticalPanel;

public class MainView extends VerticalPanel {
private static MainView me;

private MainView() {
}

public static synchronized MainView getInstance() […]

Next Page »