WGP チュートリアル - SourceForge

WGP チュートリアル
Acroquest Technology株式会社
チュートリアルの目的
本チュートリアルの目的は、課題を解く(実装する)
ことでWGPの利用方法を習得することです。
1. 課題内容
① 成績管理システム
– クライアント(JavaScript)と、サーバ(SpringMVC)とをAjaxで
連携させる。
② リバーシ
– リッチな2D描画やアニメーションを実装する。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2
【チュートリアル1】
チュートリアル1:成績管理システム
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
3
【チュートリアル1】
1. 概要
概要
① WGPを使ったWebアプリケーションを作成する。
② JavaScriptクライアントと、SpringMVCを用いて実装
したサーバ(WebFW)を、Ajax通信で連携させる。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4
【チュートリアル1】
2. 課題内容
課題内容
① 成績管理システムを作成する。
– 課題毎に設定された複数の問題について、受講者の点数を表/グラフで表示
する。
– データはサーバで保持する。値は固定値とし、リロードするたびに初期値に戻っ
て良い。
– 画面に表示するツリー、テーブル、グラフはオブジェクトとして作成すること。
JavaScriptのオブジェクト指向を利用する方法は、
「(参考)JavaScript導入」を参照すること。
② 作成には、WGPと以下のライブラリを用いること。
利用するライブラリ
説明
jQuery
JavaScript汎用ライブラリ
jQuery UI
jQuery上に構築されたUIライブラリ
Jstree
ツリーコンポーネントを提供するjQueryプラグイン
jqGrid
テーブルコンポーネントを提供するjQueryプラグイン
dygraphs
グラフコンポーネントを提供するJavaScriptライブラリ
jeegooContext
コンテキストメニューを提供するjQueryプラグイン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5
【チュートリアル1】
3. 画面イメージ∼テーブル
テーブル表示時の画面イメージ
テーブル
技術課題
グラフ
課題1
課題1-1
削除
課題1-2
課題1-3
課題1-4
課題1-1
受講者
問題1▲
問題2
問題3
合計
受講者A
10
10
10
30
受講者B
20
10
15
45
受講者C
20
20
20
60
課題1-5
課題2
課題2-1
課題2-2
課題2-3
削除
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
6
【チュートリアル1】
4. 画面イメージ∼グラフ
グラフ表示時の画面イメージ
テーブル
技術課題
グラフ
課題1
課題1-1
削除
課題1-2
課題1-1
課題1-3
点数
課題1-4
100
90
80
70
60
50
40
30
20
10
0
課題1-5
課題2
課題2-1
課題2-2
課題2-3
受講者A
受講者B
受講者C
1
2
3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4
問題番号
7
【チュートリアル1】
5. コンポーネントの説明∼テーブル
テーブル表示時の各コンポーネントの説明
ツリーで選択したノードの名前
と同じ値を表示する。
タブをクリックすることで、グラフ表
示とテーブル表示を切り替えられる。
テーブル
技術課題
グラフ
課題1
初期表示時は
ツリーのみ表示
する。
課題1-1
削除
課題1-2
課題1-1
課題1-3
課題1-4
課題1-5
右クリックで表示されるメニュー。
削除をクリックすると、 課題2
ツリーから該当の項目が削除される
サーバ側のアプリが、メ
モリ上にデータを持つ。
ソースコードにデータを
直接書いてもよい。
各問題と合計は数値によ
るソートができる。
(jqGridの機能を使う)
ラジオボタン選択時には行の
背景色が変わる。
受講者
問題1▲
問題2
問題3
合計
受講者A
10
10
10
30
受講者B
20
10
課題2-1
課題2-2
課題2-3
最下層のノードを選択した際に、テーブルの
表示およびグラフの表示が切り替わる。
ツリーのノードを選択した時に、
20
20
受講者C
グリッドの値が切り替わる。
15
45
ラジオボタンで行選択後、削除ボタン押下で
行削除できる。(ラジオボタン非選択時は
Disabledにする。)
20
60
削除
8
【チュートリアル1】
6. グラフ表示時のコンポーネントの説明
グラフ表示時の各コンポーネントの説明
テーブル
技術課題
グラフ
ツリーで選択したノードの名前
と同じ値を表示する。
課題1
課題1-1
削除
課題1-2
課題1-3
点数
課題1-4
100
90
受講者A
80
受講者B
70
60
受講者C
50
40
Y軸を点数とする。
30
最小値0、最大値100
20
目盛間隔10と設定し
10
表示する。 0
1
課題1-5
課題2
課題2-1
課題2-2
課題2-3
dygraphsを用いたグラフ
描画を行う。
課題1-1
凡例を表示すること。
場所や背景色は任意
でよい。
2
3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
X軸は問題番号の値をとる。
最小値1、最大値4、
目盛間隔1に設定して表示
する。
4
問題番号
9
【チュートリアル1】
7. 作成手順
以下の手順で開発する
①
②
③
④
⑤
⑥
⑦
⑧
⑨
⑩
各ライブラリの調査 【目安時間:8h】
タブ画面の作成 【目安時間:4h】
ツリーの作成 【目安時間:8h】
テーブルの作成 【目安時間:8h】
テーブルの行削除 【目安時間:4h】
グラフの作成 【目安時間:8h】
コンテキストメニューの作成 【目安時間:4h】
Server通信実装(初期描画時) 【目安時間:16h】
Server通信実装(Ajax通信: データ取得) 【目安時間:8h】
Server通信実装(Ajax通信: データ削除) 【目安時間:8h】
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
10
8. WGPの起動方法
【チュートリアル1】
WGPの起動方法
① WGPのサイトに移動し、ブランクプロジェクトをダウンロード
する。
http://wgp.sourceforge.net/
② ①で取得したWGP.zipを展開する。
③ 展開して作成したブランクプロジェクトをインポートする。
④ Tomcatでインポートしたプロジェクトが起動できてれば完了
です。
◆ 注意点 ◆
Tomcatのバージョンは7.0.x(最新版)を使用してください。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
11
9. 各ライブラリの調査
【チュートリアル1】
各ライブラリの調査
以下の機能を実現するために使う各ライブラリのメソッド
名と引数をそれぞれ調査する。
※引数にoptionを渡すメソッドの場合、optionの中身の調査は不要です。
①
②
③
④
⑤
⑥
jQuery UIを用いたタブの実現機能
jstreeによるツリーの作成
jqGridを用いたテーブルの作成
dygraphsを用いたグラフの作成
jeegooContextを用いたコンテキストメニューの作成
jQueryを用いたAjax通信
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
12
10. チュートリアル1実装(クライアント)
【チュートリアル1】
チュートリアル1実装(クライアント)の流れ
①
②
③
④
⑤
タブ画面の作成
ツリーの作成
テーブルの作成
グラフの作成
コンテキストメニューの追加
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
13
10-1. タブ画面の作成
【チュートリアル1】
タブ画面作成の作業内容
① 画面をツリー領域と、テーブル/グラフ領域に分ける。
② テーブル/グラフ領域をタブ化する。
テーブル
グラフ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
14
10-1. (手順1)レイアウトの設定
【チュートリアル1】
以下のレイアウトを作成する
800px
300px
900px
① 画面全体(ツリー領域とグラフ/テーブル領域)を
表すdivタグを生成する。
<div id="persArea"></div>
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
15
【チュートリアル1】
10-1. (手順2)ビューの追加
② ビューを追加する。
var viewArea1 = {width : 300, height : 800, rowspan : 1, colspan : 1 };
var viewArea2 = {width : 900, height : 800, rowspan : 1, colspan : 1 };
レイアウト情報
viewArea1:ツリー領域
viewArea2:グラフ領域
var table = [ [ new wgp.PerspactiveModel(viewArea1),
new wgp.PerspactiveModel(viewArea2) ] ];
var perspactiveView = new wgp.PerspactiveView({
id : "persArea",
collection : table
});
var perspactiveView = new wgp.PerspactiveView({
id : "persArea",
collection : table
ビュー情報を配
列にする。
DivタグのIDを
指定。
});
perspactiveView.dropView("persArea_drop_0_0", "tree_area");
perspactiveView.dropView("persArea_drop_0_1", "contents_area");
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
16
10-1. (手順3)表示確認
【チュートリアル1】
以下の構成の画面が表示されることを確認する
テーブル
グラフ
※ウィンドウサイズを変更しても、
各領域のサイズが固定されていることを確認する。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
17
【チュートリアル1】
10-2. ツリーの作成
WGPのツリービューを用いてツリーを表示する
※ツリービュー表示時の各種設定値及び、表示値はJavaScriptファイルに直
接書き込んでよい。このとき、表示値にIDを振り、HTMLのid要素に設定し
ておくこと。可能であれば、選択した要素を青く反転すること。
テーブル
技術課題
グラフ
課題1
課題1-1
課題1-2
課題1-3
課題1-4
HTMLタグのid要素にIDを振
っておくこと。
課題1-5
課題2
課題2-1
課題2-2
課題2-3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
18
10-2. (補足説明)Backbone.jsについて
【チュートリアル1】
1. ツリーの作成には、Backbone.jsを用いる。
2. Backbone.jsとは?
① JavaScript上で、MVCモデル構造(※)を持ったアプリケーシ
ョンを開発するためのJavaScriptフレームワーク。
② モデル、ビュー、イベントを定義する。
3. 参考URL
http://documentcloud.github.com/backbone/
※MVCモデルについては、
「9-2. MVCモデル」を参照すること。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
19
10-2. (手順1)ビューの追加
【チュートリアル1】
① ツリーのデータを表すModelをBackbone.jsの構成
に基づいて作成する。
user.TreeModel = Backbone.Model.extend({
defaults:{
text : "",
デフォルト定義
styleClass : [],
style : {}
},
idAttribute:“treeId"
});
user.TreeList = Backbone.Collection.extend({
model : user.TreeModel
});
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
20
10-2. (手順2)モデルの追加1
【チュートリアル1】
② ツリーのViewをBackbone.jsの構成に基づいて作成
する。
user.TreeView = wgp.AbstractView.extend({
initialize : function(arguments){
this.divId = this.$el.attr("id");
this.ulId = this.divId + "_ul";
初期化時
this.maxId = 0;
this.registerCollectionEvent();
描画時
this.render()
},render : function(){
$("#" + this.divId).append("<ul id='" + this.ulId + "'></ul>");
});
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
21
10-2. (手順3)モデルの追加2
【チュートリアル1】
③ View及びModelを作成する。
// idはパースペクティブ領域初期化時のidと同値を指定する。
var treeView = new user.TreeView({
id : "tree_area",
model : new user.TreeModel(),
collection : new user.TreeList()
});
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
22
【チュートリアル1】
10-3. テーブルの作成
jqGridを用いて、成績をテーブル表示する
※ jqGrid表示時の各種設定値及びjqGridの表示値は、ここではJavaScriptフ
ァイルに直接書き込んでよい。このとき、受講者それぞれにID列を設け、ID
を振ること。そのうえで、ID列は非表示列に設定すること。
※radioボタン表示は列の設定で行うことができる。
テーブル
技術課題
グラフ
ID列を設定するが表示しない。
課題1
課題1-1
削除
課題1-2
課題1-3
課題1-1
受講者
問題1▲
問題2
問題3
合計
受講者A
10
10
10
30
受講者B
20
10
15
45
受講者C
20
20
20
60
課題1-4
課題1-5
課題2
課題2-1
課題2-2
課題2-3
削除
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
23
10-3. (注意点)jqGridの利用方法
【チュートリアル1】
jqGrid 利用時には以下の注意が必要である
① 2つのjsファイルを読み込む必要がある。
1. ロケール定義ファイル
2. ライブラリ本体
② (1)ロケール定義ファイル→(2)ライブラリ本体の順で
読み込む必要がある。
– ライブラリ本体がロケール定義ファイルを参照するため、読
み込む順番を逆にするとエラー(b.jgrid.jqID is not a
function)が発生する。
※ エラーメッセージから原因を特定することが難しい。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
24
【チュートリアル1】
10-3. テーブルの行削除
削除ボタン押下時に行を削除する
※ 削除を行うメソッドがjqGridに用意されているので、使用すること。
テーブル
技術課題
グラフ
課題1
課題1-1
削除
課題1-2
課題1-3
課題1-1
受講者
問題1▲
問題2
問題3
合計
受講者A
10
10
10
30
受講者B
20
10
15
45
受講者C
20
20
20
60
課題1-4
課題1-5
課題2
課題2-1
課題2-2
課題2-3
削除
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
25
10-3. (手順)jqGridの行削除メソッド
【チュートリアル1】
1. 行を削除するメソッドには delRowData と
delGridRow が存在する。
※ それぞれのメソッドについて調べること。
jqGrid wiki: http://www.trirand.com/jqgridwiki/doku.php
(メソッド名で検索をかけると良い)
2. delRowData メソッドを利用する。
行のidを設定する方
法を調べること
※ 例: $(selector).delRowData( rowid );
※ delGridRowはサーバ通信を伴うため今回は不適
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
26
【チュートリアル1】
10-4. グラフの作成
dygraphsを用いて、成績をグラフ表示する
※ dygraphs表示時の各種設定値及び、 dygraphsの表示値はJavaScriptフ
ァイルに直接書き込んでよい。
テーブル
技術課題
グラフ
課題1
課題1-1
課題1-2
課題1-3
課題1-1
点数
100
課題1-4
課題1-5
凡例
部分
80
60
課題2
課題2-1
40
課題2-2
20
課題2-3
0
1
2
3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4
問題番号
27
10-4. (注意点)グラフの生成タイミング
【チュートリアル1】
タブを生成してからグラフの生成を行う必要があ
る
① タブを生成する際にタブ内の width , height 値が変
更されるため、グラフを先に描画しておくとグラフが
壊れて表示されない。
– グラフ表示領域の width, height が0となってしまう。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
28
10-5. コンテキストメニューの作成1
【チュートリアル1】
WGPのコンテキストメニュー作成機能を用いて、
ツリーにコンテキストメニューを表示する
※ コンテキストメニュー表示時の各種設定値及び、 表示値はHTMLファイル
及びJavaScriptファイルに直接書き込んでよい。
テーブル
技術課題
グラフ
課題1
課題1-1
削除
課題1-2
課題1-3
課題1-4
課題1-5
課題2
課題2-1
課題2-2
課題2-3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
29
10-5. コンテキストメニューの作成2
【チュートリアル1】
親のノードをクリックした際に、コンテキストメニュ
ーが表示されないよう制御する
※表示時のコールバックメソッドの戻り値に何を返すかがポイント。
テーブル
技術課題
グラフ
課題1
課題1-1
課題1-2
課題1-3
クリックしても表示されない。
課題1-4
課題1-5
課題2
課題2-1
課題2-2
課題2-3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
30
【チュートリアル1】
10-5. (手順)コンテキストメニューの表示方法
WGPでは以下のようにコンテキストメニューを表示する
① divタグを生成する。
<div id=“targetContext"></div>
② メニューを生成する。
<ul id="contextMenu">
<li id="delete">削除</li>
</ul>
③ ①で生成したタグにコンテキストメニューを設定する。
contextMenuCreator.createContextMenu(“targetContext”, “contextMenu”, option);
option については、jeegooContextのマニュアルを参照。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
31
【チュートリアル1】
10-5. (注意点)メニューの作成タイミング
コンテキストメニュー構築後にツリーを構築すると、コン
テキストメニューが表示されない
① 間違った解決策: プログラムの実行順序を変更する。
– ツリーメニューやコンテキストメニューの作成は別スレッドで行われるた
め、この方法でもメニューは表示されない。
② 解決策:jstree構築完了時の処理に入れる。
– jsTreeは構築が完了すると”loaded.jstree”が呼び出される。←ここにメ
ニュー構築処理を入れる。
loaded.jstree
に対して…
– jQueryのbindメソッドを利用する。
– 例: $(selector).bind(“loaded.jstree”, function(){
// コンテキストメニュー構築処理
});
コールバック関数
を追加
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
32
11. チュートリアル1実装(サーバ)
【チュートリアル1】
チュートリアル1実装(クライアント)の流れ
① 概要説明
② SpringMVC導入・実装
③ Ajax通信導入・実装
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
33
11-1. Server通信実装(初期描画時)
【チュートリアル1】
これまで、クライアント側で設定していたデータを、サー
バから読み込むように変更する
① 初期描画用のデータは、サーバ側からクライアントに渡し、デ
ータをもとにクライアント側のコンポーネントを構築すること。
– Modelクラスにデータを書き込み、クライアントで読み込む。
– データ形式は、JSON形式とする。
– 初期値の構築は自由に実装してよい。
② サーバとのデータの受け渡しは、SpringMVCを用いること。
③ HTMLではなく、JSPを用いること。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
34
11-2. MVCモデル
【チュートリアル1】
1. MVCモデルとは?
表示、操作を伴うアプリケーションを作成するときに用いられる、
標準設計方法である。
2. アプリケーションをModel, View, Controller
に分割して整理する。
① Model
② View
③ Controller
ロジックとデータを示す。
画面等のユーザインタフェースを示す。
入力処理・ページ遷移などを示す。
3. なぜMVCに分割するのか?
① モジュール分割が容易になり、保守性、再利用性が高まる。
② ユーザインタフェース(View)の取り換えが容易である。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
35
11-3. SpringMVC
【チュートリアル1】
1. SpringMVCとは?
Javaで作成されたWebフレームワーク。
画面遷移や、ブラウザ-サーバー間の入出力パラメータの受け渡
しといった、Webアプリケーションを簡単に作るための機能を提
供する。
2. 参考URL
http://www.springsource.org/
◆SpringMVCを用いれば、MVCモデルを用いて
効率よくWebシステムを開発できます。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
36
【チュートリアル1】
11-4. 本課題でのMVCモデル
グラフデータの削除を例にMVCの役割を示す
① 削除ボタンを押す
② データ削除を要求する
View
Controller
⑥ jspを用いてブラウザに
画面表示(削除が反映)
W GP
⑤ J SP ファイルを返す
④ データを返す
受
講
者
問
題
1▲
問
題2
問
題3
合
計
受講
者A
10
10
10
30
受講
者B
20
10
15
45
受講
者C
20
20
20
60
③ データを削除する
Model
削除
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
37
【チュートリアル1】
11-5. (手順1)Spring MVC の導入
1. 空の Spring MVC プロジェクトをEclipseで開く。
2. M,V,Cは以下のファイルに結びつく。
① Controller : サーバサイドプログラム
src/main/java/jp.co.acroquest.example.controller
② Model : サーバサイドプログラム
src/main/java/jp.co.acroquest.example.service
③ View : クライアントサイドプログラム
WebContent/WEB-INF/views/xxxx.jsp
css,js,imageなどの参照ファイル
成果物をSpring MVCに
移行させるためには
主にこの2つを編集する。
• 上記ファイルは、/WebContent/resources 配下に入れないと読み込めないの
で注意。
※各自、Spring MVC について調べること。
Spring Framework 参考URL: http://www.springsource.org/
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
38
【チュートリアル1】
11-5. (手順2)Spring MVC への移行(1/4)
1. クライアントとサーバの通信を定義する。
※ あるURLに対する振る舞いを1対1で定義する。
→Controllerクラスを用いて定義する。
ブラウザ表示
View
① リクエストを送る
② jspを返す
Controller
2. コントローラの定義方法。
①
②
③
④
controllerクラスを新たに定義する。
controllerクラス内に、URLとメソッドの対応を定義。
メソッド内の処理を記述する。
表示するjspを指定する。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
39
【チュートリアル1】
11-5. (手順3)Spring MVC への移行(2/4)
3. Controllerクラスを定義する。
① Controllerパッケージ内に定義する。
② クラス名上に@Controllerを付け加える。
– これにより、controllerクラスと認識される。
4. URLとメソッドの対応を定義する。
① @RequestMappingをメソッド上につける。
– @RequestMapping( value=“/mapping/”, method=RequestMethod.GET )
public String methodName(Locale locale, Model model){}
メソッドに対応するURLを記述する。この例の場合、
http://localhost:8080/<contextName>/mapping/
よく使われるリクエストメソッドにGETとPOST
がある。それぞれの違いについて調べる。
でリクエストされると、methodNameメソッドが呼ばれる。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
40
【チュートリアル1】
11-5. (手順4)Spring MVC への移行(3/4)
5. メソッド内の処理を追加する。
① クライアントから渡された値を取得する。
② クライアントに値を渡す。
public String methodName(@RequestParam(value=“keyName") String studentId
Locale locale, Model model){
model.addAttribute(“keyName”, value);
}
①Keyを設定し、値を取得する。
②Keyとvalueを設定し、値を渡す。どちらもString型
で定義する。
6. 表示するjspを指定する。
① return値にjspのファイル名を記述する。
public String methodName(Locale locale, Model model){
//処理
http://localhost:8080/ProjectName/にアクセスした場合、
return “jspName”;
WebContent/WEB-INF/views/jspName.jspが呼び出される。
}
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
41
【チュートリアル1】
11-5. (手順5)Spring MVC への移行(4/4)
7. HTMLファイルをJSPファイルに移行する。
① HTMLの内容をJSPにそのままコピー。
② css,js,imageのパスをjsp用に変更する。
– <%=request.getContextPath()%>を使う。
「../」のような参照方法が使用できなくなるため。
– 例) jQuery のディレクトリパスが以下の場合の例
/WebContent/resources/lib/jQuery/js/jquery-1.7.1.min.js
→<%=request.getContextPath()%>/resources/lib/jQuery/js/jq
uery-1.7.1.min.js
ここまでで Spring MVC を用いて
View を表示する部分が完了!
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
42
11-6. (補足説明)JSONデータの作り方
【チュートリアル1】
クライアントにデータを渡すためには、Javaオブ
ジェクトをJSON形式に変換する必要がある。
① JSON形式を簡単に作成できる、JSONICを用いる。
– Javaオブジェクトを簡単にJSON形式に変換可能。
– Javaオブジェクトのフィールド名をkeyに、値をvalueとした連
想配列型データとしてJSON型に変換する。
– List型のJavaオブジェクトであれば、Array型のJSON形式
に変換する。
② 以下のように変換される。
private String id;
private String name;
{“id”:”123”,”name”:”daniel”}
//getterとsetterを必ず作ること。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
43
【チュートリアル1】
11-7. Server通信実装(Ajax通信: データ取得)
1. ツリーの最下層のノードをクリックした際に、サー
バからデータを取得する。
① jQueryのAjax通信を用いて、サーバにリクエストを
送信すること。リクエストはPOST形式とし、データに
課題番号を設定すること。
– サンプルプログラムを参考にすること。
2. 取得したデータを用いて画面を表示し直す。
① jqGridの再描画の際に、一度表示値をすべて削除し
て入れ直す必要がある。
– Callback処理内で再描画をおこなうこと。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
44
11-7. (手順1)Ajax通信のやり方(1/2)
【チュートリアル1】
ページのリロードをせずにサーバと通信を行う手
法がAjax通信である。
① Ajax通信の利点。
– サーバからデータのみ取得し、ページの一部のみ書き換え
られる。
Ajax通信
① P OST形式のリクエスト
を送る
View
③ 画面の一部を描画
しなおす
Controller
② J SON 形式のデータを
返す
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
45
11-7. (手順2)Ajax通信のやり方(2/2)
【チュートリアル1】
② 設定方法。
– クライアント
jQueryのajaxメソッドを使用する。メソッドの引数には以下を設定する。
• url : 呼び出したいメソッドのURL
• type : “POST”
• data : 送信したいデータ
• Success : 通信成功時の処理 ※サンプルプログラム参照
– サーバ
@RequestMappingのmethod属性にRequestMethod.POSTを設定する
。
@ResponseBodyを設定する。
• 戻り値にJavaオブジェクトを設定することで、自動でJSON形式に変換
し、データを返す。
@RequestParamにクライアントから送信されるデータのkeyを設定する。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
46
【チュートリアル1】
11-8. Server通信実装(Ajax通信: データ削除)
1. 以下の場合にサーバに削除処理を送信する。
① コンテキストメニューで削除が選択されたとき。
② 削除ボタンをクリックしたとき。
– クリックイベントを設定すること。
– リクエストはPOST形式とする。
2. サーバ側のデータを削除する。
① 画面更新を行った際に、削除されたデータが表示さ
れないこと。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
47
【チュートリアル2】
チュートリアル2:リバーシ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
48
【チュートリアル2】
1. 目的
以下のスキルを身に付ける
① Raphael を用いてリッチな画面描画やアニメーショ
ンを実現できるようになる。
② WGPを用いて画面を構築できるようになる。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
49
【チュートリアル2】
2-1. 仕様: 画面イメージ
以下のような構成で画面を作成する
① リバーシWindow。
– オセロの盤面などを
表示する。
①
② メッセージWindow。
– ゲームについての情報を
文字で表示する。
②
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
50
【チュートリアル2】
2-2. リバーシWindow
1.盤面の表示
以下を実現する
①
②
③
④
盤面の表示
クリックで石を配置
スコア表示
プレイヤー表示
4.プレイヤー表示
– 現在のプレイヤーを
ハイライトで表示する。
2.クリックで石を配置
3.スコア表示
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
51
2-3. メッセージWindow
【チュートリアル2】
ゲームについてのメッセージを表示する
① 各メッセージには表示時刻を付けること。
② 表示する内容については自分で考えること。
表示時刻
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
52
3-1. 実装ワンポイントアドバイス①
【チュートリアル2】
1. WGP で生成した window 内に Raphael を用い
て描画する手順。
① Raphael のインスタンスを作成する。
persManager.dropView("persArea_drop_0_0", DIV_ID);
paper = new Raphael( document.getElementById( DIV_ID ) , WIDTH, HEIGHT )
WGPのdropViewで
登録したDIVのID
作成する Raphael の
描画領域の大きさ
② 作成したインスタンスを用いて描画を行う。
※ Raphael: http://raphaeljs.com/
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
53
3-2. 実装ワンポイントアドバイス②
【チュートリアル2】
2. Raphael を用いたアニメーションの書き方。
circle.animation( params, ms, [easing], [callback] )
①
params: 変化後の属性値を連想配列形式で記述する。
– 利用可能な属性についてはリファレンス参照。
– http://raphaeljs.com/reference.html#Element.attr
②
③
ms: アニメーション開始から終了までの時間(ミリ秒)。
easing: 変化の仕方。
– 利用可能な値はリファレンス参照。
– http://raphaeljs.com/reference.html#Raphael.easing_formulas
④
callback 関数。
※ 例: circle を(100, 100)まで1000msで移動させ、完了したらアラートを出現する
circle.animate( { cx: 100, cy: 100 }, 1000, “<>”, function(){ alert() } );
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
54
3-3. 実装ワンポイントアドバイス③
【チュートリアル2】
3. マウスカーソル位置の取得には注意が必要。
① eventオブジェクトからは
ページ左上からの座標
(px, py) しか得られない。
Raphael 描画領域
– 余白を考慮する必要あり!
(px, py)
(rx, ry)
② Raphael の描画領域の
左上座標 (rx, ry) を取得し、
Raphael 描画領域上の
座標を計算する。
( px – rx, py – ry )
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
55
【(参考)JavaScript導入】
(参考)JavaScript導入
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
56
1. JavaScript における オブジェクト
【(参考)JavaScript導入】
1. JavaScript のオブジェクトの記述形式のことを、
JSON(JavaScript Object Notation) と言う。
① キーと値のペアの集合である。
② Javaにおける Map と似ている。
JavaScript
Java
var obj = {
“key1”: “Acro”,
“key2”: “Quest”
}
Map<String, String> obj = new HashMap<String, String>();
obj.put( “key1”, “Acro” );
obj.put( “key2”, “Quest” );
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
57
【(参考)JavaScript導入】
2. 関数オブジェクト
1. JavaScript において関数はオブジェクトの1つである。
2. 一般的なオブジェクトと同様の扱いが可能である。
※ Java では関数(メソッド)とオブジェクトは完全に別物。
• JavaScript 特有の関数オブジェクト利用例
var func1 = function(){ alert(“test”) };
var func1 = function(){ alert(“test”) };
func1( ); // カッコをつけて実行
var func2 = function( arg ){
arg(); // 引数にセットした関数オブジェクトを実行
}
func2( func1 ); //関数オブジェクトを引数にセット
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
58
【(参考)JavaScript導入】
3. 無名関数
1. 無名関数とは匿名の関数オブジェクトであり、
イベントリスナなどに用いることが多い。
※ イベントリスナ: イベントが発生した時に実行される関数
① 無名関数の利用例:
$(selector).addEventListener( ‘click’, function(event){
//処理
}, false );
※ 関数オブジェクトに置き換えた例:
無名関数
var clickListener = function(event){ // 処理 };
$(selector).addEventListener( ‘click’, clickListener, false);
※参考URL :http://builder.japan.zdnet.com/script/sp_javascript-kickstart-2007/20364588/
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
59
【(参考)JavaScript導入】
4. 無名関数利用時の注意
1. 無名関数内部では this を使わないこと。
■悪い例
■良い例
var ClassName = function(){
var ClassName = function(){
this.val = “String”;
this.val = “String”;
}
}
ClassName.prototype = {
ClassName.prototype = {
method: function(){
method: function(){
$(“#id_name”).bind(“loaded.jstree”, function(){
var instance = this;
alert( this.val );
$(“#id_name”).bind(“loaded.jstree”, function(){
});
}
}
スコープ内での変
数に格納しておく
alert( instance.val );
this が無名関数を指すため
undefined error になる
});
}
めでたく String が表示される
}
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
60
5. コールバック関数
【(参考)JavaScript導入】
1. コールバック関数とは呼び出し先の関数の実行
中に呼び出されるよう指定した関数。
※ JavaScript ではマウス移動などのイベントにコール
バック関数を設定することが多い。
① マウスクリックに設定する例
$(“#button”).addEventListener( ‘click’, function(event){
alert( “#button がクリックされました。” );
}, false );
(2)コールバックの実行
(1)コールバック
の登録
– 上記プログラムは以下の順序で実行される。
(1) コールバック関数の登録(関数の中身は実行されない)。
(ユーザがマウスをクリックする)。
(2) コールバック関数の実行。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
61
【(参考)JavaScript導入】
6. オブジェクト指向プログラミング(1/4)
1. Java Script
2. Java
① クラスの定義
① クラスの定義
var ClassName = function( args ){
class ClassName{
this.val1; //属性の定義
public int val1; //属性の定義
this.val2; //属性の定義
public int val2; //属性の定義
}
ClassName(args){
※インスタンス作成時に呼ばれる
ClassName.prototype={
// コンストラクタ
prototype
method1: function(args){
}
については
public void method1(args){
// method1 の処理
次頁参照
},
// method1 の処理
method2: function(args){
}
public void method2(args){
// method2 の処理
}
// method2 の処理
}
}
※メソッドの戻り値は任意
}
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
62
【(参考)JavaScript導入】
7. オブジェクト指向プログラミング(2/4)
1. Java Script
2. Java
② インスタンスの作成・メソッド呼び出し
var className = new ClassName();
className.method1(args);
② インスタンスの作成・メソッド呼び出し
ClassName className =
new ClassName()
className.method1(args);
③ 継承
var SubClass = function(){
// 属性の定義
}
// SuperClassのメソッドを継承
③ 継承
class SubClass extends SuperClass{
// 省略
}
SubClass.prototype = new SuperClass();
// メソッドの定義
SubClass.prototype.m2=function(){….};
SubClass.prototype.m3=function(){….};
新規メソッドを追加するときに前頁のよう
にカンマ区切りでのオブジェクト的記法が
利用できない。理由は調べること。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
63
【(参考)JavaScript導入】
8. オブジェクト指向プログラミング(3/4)
1. 『prototype』を用いるとオブジェクト指向プログラ
ミングが可能となる。
// クラスの作成
var SampleClass = function( mes ){
this.message = mes;
}
SampleClass.prototype ={
showMessage: function(){
alert( this.val );
}
}
インスタンスを複数作成し、異なる
属性値を持たせることができる。
// クラスの利用
// インスタンスの作成
var instance1 = new SampleClass(“Hello”);
var instance2 = new SampleClass(“Bye”);
// メソッドの呼び出し
instance1.showMessage();
Instance2.showMessage();
ドット演算子を用いてメソッドを呼び出す
// 属性値の利用
instance1.message = “Welcome to WGP”
ドット演算子で属性を読み書きできる
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
64
【(参考)JavaScript導入】
9. オブジェクト指向プログラミング(4/4)
2. 『prototype』を使わない場合、オブジェクト指向
プログラムにならないので注意すること!
間違った例
//クラスの定義
var obj = function(){
this.message = "Message";
};
thisを用いた変数の参照ができな
いので、undefinedとなる。
//prototypeを使わずにメソッドを宣言
obj.method = function(){
alert( this.message );
};
ドット演算子でメソッドを参照でき
ないため、エラーが発生する。
//インスタンスの作成
var instance = new obj();
instance.method(); //エラー発生
obj.method();
メソッドを呼び出すことができるが
アラートの表示はundefined
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
65
【(参考)JavaScript導入】
10. Selector
1. HTMLタグを特定するための記法であり、課題で
は各パーツを表示する場所の指定に用いる。
① ID
CSS の書き方と同じ
– 例: <div id=“ id_name” > ⇒ “#id_name” と記述
– ページ内に同じIDが複数あってはならない。
② Class
– 例: <table class=“ class_name” > ⇒ “.class_name” と記述
– 同じクラス名をページ内で複数用いることができる。
③ Name
– 例:<input type=“radio” name=“ group_name” > ⇒ [name=group_name] と記述
– ラジオボタンのグループ化などに用いる。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
66
11. jQuery を利用したSelector記法
【(参考)JavaScript導入】
1. jQuery メソッドの利用方法は以下の通りである。
① jQuery(selector)
② $(selector)
意味は同じ
$ を用いることが多い
2. Selectorを実際に記述した例
① $(“#id_name”).method(…);
② $(“.class_name”).method(…);
③ $(“[name=group_name]”).method(…);
– jQueryのメソッドはリファレンスを参照
– jQuery日本語リファレンス: http://semooh.jp/jquery/
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
67
これであなたもWGP開発者だ!
Infrastructures Evolution
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
68