Forums: Open Discussion (Thread #17800)

WEB版とリッチ版 (2008-02-21 16:54 by Anonymous #35210)

WEB版とリッチ版は共存できるようなのですが、
WEB版で基本的なシステムを作り、
一部の画面でAjaxによる通信を行う事は可能でしょうか?

可能な場合、注意点などございましたら
お教え頂けますようお願いいたします。

Reply to #35210×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: WEB版とリッチ版 (2008-03-05 14:30 by yggd #35431)

TERASOLUNA フレームワークでは現在 Ajax に対応した機能はございませんが、
Ajax と Web版フレームワークとの共存は基本的には可能だと考えます。
しかし Ajax によるリクエスト処理を、TERASOLUNA FW で行うか行わないかで、設計が変わります。

通常 WEB 版では、WebAP サーバのアプリケーションに対し、/xxxx.do というパスでリクエストを送信しますが、それ以外のパターンではリクエストを受理しません。

TERASOLUNA Web版のフレームワークと併用する際の参考情報としましては、Web版の基底フレームワークである Struts と、Ajax ライブラリの1つである Dojoを組み合わせてサンプルを作成する例をご紹介します。

http://japan.internet.com/developer/20060926/26.html
(残念ながら TERASOLUNA では、上記の Struts-Tiles には対応していません。)

注意点としましては、非 Ajax と比較して、大量のリクエストデータが送信されるため、より厳しい性能要件が求められるものと考えます。

以上、一般論になってしまいましたが TERASOLUNA では現在、 Ajax に対応した機能についても検討、鋭意開発中です。
差し支えなければ調査・開発時に得られましたノウハウ(アンチパターンでも結構です)がありましたら、ご提供いただけますと幸いです。
Reply to #35210

Reply to #35431×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: WEB版とリッチ版 (2008-03-05 15:54 by kimumasa #35439)

補足にはなりますが、Web版適用プロジェクトでは
DWR(http://getahead.org/dwr)やDojoを利用し、
Ajaxを実現しているプロジェクトもあります。

DWRはJavaの技術者が分かり易い開発スタイルになっており
入力補助やCometのようなサーバプッシュの実現
程度の軽いAjaxの実現に適していると感じております。

重厚なAjaxを実現するのであれば、yggdの言うとおり
Dojoが良いと思います。
※JSONでやり取りするため、Tilesを適用しなくとも利用する事は可能です。
 私が参画しているプロジェクトではDojoと連携させています。
※POJO-JSONの変換パーサはJSON-libが代表的なものかと思います。
 私自身はJSONICを利用しております。ご検討いただければと存じます。
 (http://jsonic.sourceforge.jp/

以下は少し古いDWR2.0と
TERASOLUNA Server Framework for Java (Web版)
の連携例(一覧表示)になります。
※DWRのAPIが一部古い可能性があります。
 最新のAPIはDWRのサイトのDocumentationをご参照願います。
===========
以下のような一覧表示用BLogicがあって、これをAjax対応したい場合は以下の方法になる。
----<ListBLogic.javaここから
public class ListBLogic implements BLogic<ListParams> {

public BLogicResult execute(ListParams value) {
BLogicResult result = new BLogicResult();
// 本当はDBからデータを取得
List<ListResult> list = new ArrayList<ListResult>();
ListResult listResult1 = new ListResult();
listResult1.setAge("30");
listResult1.setBirth("1976/11/14");
listResult1.setId("00001");
listResult1.setName("kimumasa");
list.add(listResult1);

ListResult listResult2 = new ListResult();
listResult2.setAge("32");
listResult2.setBirth("1974/11/14");
listResult2.setId("00002");
listResult2.setName("yggd");
list.add(listResult2);

result.setResultObject(list);
return result;
}
}
---->ListBLogic.javaここまで

----<web.xml(一部)ここから
<!-- DWR2.0 -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.spring.DwrSpringServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- DWR Spring Servlet Mapping -->
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
---->web.xml(一部)ここまで

----<applicationContext.xml(一部)ここから
<bean id="listBLogic" class="jp.terasoluna.ajax.list.ListBLogic">
<dwr:remote javascript="ListBLogic">
<dwr:include method="execute" />
</dwr:remote>
</bean>
<dwr:controller id="dwrController" />
<dwr:configuration>
<dwr:convert type="bean" class="jp.terasoluna.fw.service.thin.BLogicResult" />
<dwr:convert type="bean" class="jp.terasoluna.ajax.list.ListResult" />
<dwr:convert type="bean" class="jp.terasoluna.ajax.list.ListParams" />
</dwr:configuration>
---->applicationContext.xml(一部)ここまで
※pluginから読み込むmoduleContextでは、ServletContextに保存する位置の関係からDWRからの呼び出しに失敗するのでご注意ください。


----<jspここから
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html" %>
<%@ taglib uri="/struts-bean" prefix="bean" %>
<%@ taglib uri="/struts-logic" prefix="logic" %>
<%@ taglib uri="/terasoluna-struts" prefix="ts" %>
<%@ taglib uri="/terasoluna" prefix="t" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<link rel="stylesheet" href="style.css" type="text/css">
<!-- ①リモートオブジェクトのインターフェースを取得する -->
<script type="text/javascript" src="dwr/interface/ListBLogic.js"> </script>
<!-- DWRから提供されている共通JavaScriptの読み込み -->
<script type="text/javascript" src="dwr/engine.js"> </script>
<script type="text/javascript" src="dwr/util.js"> </script>

<script>

var cellFuncs = [
function(data) { return data.id; },
function(data) { return data.name; },
function(data) { return data.age; },
function(data) { return data.birth; }
];

function init() {
DWRUtil.useLoadingMessage("読み込み中");
}

function showList() {
var searchid = dwr.util.getValue("searchid");
var listParams = { id:searchid, name:null, age:null, birth:null };
alert('showList:' + searchid);
// リモートオブジェクトの実行(第二引数はコールバック関数)
ListBLogic.execute(listParams, loadListResult);

}

function loadListResult(listResults) {
alert('loadListResult:' + listResults.resultObject.id);
DWRUtil.removeAllRows("results");
DWRUtil.addRows("results", listResults.resultObject , cellFuncs, {
rowCreator:function(options) {
var row = document.createElement("tr");
if (options.rowNum % 2 == 1) {
var klazz = document.createAttribute("class");
klazz.nodeValue = "odd";
row.setAttributeNode(klazz);
}
return row;
}
});
}
</script>
</head>
<body>
<h2>一覧表示サンプル</h2>
<p>検索条件: <input type="text" id="searchid" />
<input type="button" value="一覧表示" onclick="showList()" /><br/>
<p/>
<table border="1" frame="box">
<tr>
<td width="30" id="id" align="center"><b>ID</b></td>
<td width="100" id="name" align="center"><b>NAME</b></td>
<td width="30" id="age" align="center"><b>AGE</b></td>
<td width="80" id="birth" align="center"><b>BIRTH</b></td>
</tr>
<tbody id="results"/>
</table>
<p/>
</body>
</html:html>
---->jspここまで
Reply to #35431

Reply to #35439×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login