【転】DWRでJAVAクラスの戻り値を直接取得することができます。
2733 ワード
原文:
http://szumaky.blog.sohu.com/73695290.html
DWRはAjaxのオープンソースフレームであり、リモートJavaクラスの呼び出しを実現するのに便利である。しかし、DWRはコールバック関数の方法しか採用できません。コールバック関数で戻り値を取得してから処理します。では、一つの方法の戻り値を直接取得する方法がありますか?
以下は簡単なJava類を書きます。
DWRにTestがDWRに対応するクラス未JTestを配置したと仮定すると、get String方法を呼び出すことができます。
DWRはAjaxのフレームワークであり、必然的にAjaxの特性を持っていることを知っています。
まず、Ajaxの運行原理を説明しましょう。実は、その原理はとても簡単です。遠端アドレスを呼び出して、ページからデータを返して、分析処理を行います。このプロセスは非同期です。なぜDWRがコールバック関数を採用したのかは分かりませんが、Javaクラスを呼び出した後、コールバック関数はいつ実行されるか分かりません。
更にAjaxの方法を見てみます。XMLtHttpRequestのopen関数は同期パラメータがありますか?
XMLHttpRequest.open(String method,String URL,bolean asynchronous)
そのうちのasynchronousは同期するかどうかのパラメータです。
今、DWRのengine.jsファイルを開けて、asynを探してみます。すぐにsetsArync方法が見つかりました。DWRはこの方法で属性を設定してパッケージ化しました。これにより、戻り値を取得する機能が実現されます。
以下、DWRでJava類をカプセル化します。
これらの書き方は面倒くさいです。次のように書いてもいいです。
http://szumaky.blog.sohu.com/73695290.html
DWRはAjaxのオープンソースフレームであり、リモートJavaクラスの呼び出しを実現するのに便利である。しかし、DWRはコールバック関数の方法しか採用できません。コールバック関数で戻り値を取得してから処理します。では、一つの方法の戻り値を直接取得する方法がありますか?
以下は簡単なJava類を書きます。
public class Test()
{
public String getString()
{
return "test";
}
}
上のこの種類は簡単です。中のget Stringは直接に文字列に戻ります。DWRにTestがDWRに対応するクラス未JTestを配置したと仮定すると、get String方法を呼び出すことができます。
function Test()
{
// Java Test getString ,callBackFun
JTest.getString(callBackFun);
//
function callBackFun(data)
{
alert(data);
}
}
ここで処理するのは簡単です。javaクラスのメソッドを呼び出して、コールバック関数で処理します。上記の話を実行するとtest、つまりjavaメソッドの戻り値が表示されます。しかし、家に帰る関数を採用するのは私達の習慣に合わないで、時には私達は直接に帰って値を得て処理したいです。この時はどうすることもできません。DWRはAjaxのフレームワークであり、必然的にAjaxの特性を持っていることを知っています。
まず、Ajaxの運行原理を説明しましょう。実は、その原理はとても簡単です。遠端アドレスを呼び出して、ページからデータを返して、分析処理を行います。このプロセスは非同期です。なぜDWRがコールバック関数を採用したのかは分かりませんが、Javaクラスを呼び出した後、コールバック関数はいつ実行されるか分かりません。
更にAjaxの方法を見てみます。XMLtHttpRequestのopen関数は同期パラメータがありますか?
XMLHttpRequest.open(String method,String URL,bolean asynchronous)
そのうちのasynchronousは同期するかどうかのパラメータです。
今、DWRのengine.jsファイルを開けて、asynを探してみます。すぐにsetsArync方法が見つかりました。DWRはこの方法で属性を設定してパッケージ化しました。これにより、戻り値を取得する機能が実現されます。
以下、DWRでJava類をカプセル化します。
function Test()
{
var _data = "";
this.getString = function()
{
//
DWREngine.setAsync(false);
// Java Test getString ,callBackFun
JTest.getString(callBackFun);
//
DWREngine.setAsync(true);
return _data;
}
//
function callBackFun(data)
{
_data = data;
}
}
上記の方法は、javaメソッドを呼び出す前に同期方式に設定し、javaメソッドを呼び出した後、コールバック関数を実行した後、次のように、_に戻ります。dataは既に割り当てられているので、正常に値を取得することができます。これらの書き方は面倒くさいです。次のように書いてもいいです。
function Test()
{
var _data = "";
this.getString = function()
{
//
DWREngine.setAsync(false);
// Java Test getString ,callBackFun
JTest.getString(function(data){_data = data;});
//
DWREngine.setAsync(true);
return _data;
}
}