[Wicket-ja-user 653] Re: jQueryのajaxメソッドをJava側で受信する方法

Back to archive index

Tsutomu Yano t_yano****@me*****
2012年 3月 29日 (木) 09:58:38 JST


矢野です。

Wicketの場合、どこかのActionのURLを実行するという形ではないので、メソッドと直接マッピングするわけにはいかないですね。


やりたいことによって2通り考えられます。

1. Javascript側からURLにアクセスすることで、Wicketのコンポーネントを変化させたい

JavascriptからURLアクセスによってWicketのサーバ側ロジックを動作させて、Wicketのコンポーネントを変化させたい(ページを操作したい)なら、AbstractAjaxBehaviorの(匿名)サブクラスを作って、onRequest() に実行したい処理を書くのがいいかと思います。

AbstractAjaxBehavior には、自身を呼び出すためのUrlを作る「getCallbackUrl()」というメソッドがあります。このUrlにアクセスすると、AbstractAjaxBehavior の onRequest が呼び出されます。

とはいえ、この getCallbackUrl() をJavascript側から使えるようにしなくちゃいけないです。

これも、AbstractAjaxBehavior の renderHead(Component component, IHeaderResponse response) をオーバーライドすると、HTMLの<head>タグ内を加工できるので、Javascriptを出力して、callbackUrl をJavascriptの変数に代入しちゃうとか、あるいは AbstractAjaxBehavior を呼び出す関数を定義するとかすればいいです。

(簡易コード)
@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.renderJavaScript("var behaviorUrl = '" + getCallbackUrl() + "';", "behaviorUrl");
}

などとオーバーライドすれば、このビヘイビアにアクセスするには、Javascript側から behaviorUrl にアクセスしてやればよいことになります。パラメータを渡したいなら、callbackUrlを加工してください。

何か値を返したいなら、RequestCycle.get().getResponse() でResponseオブジェクトを取得して、送信してください。


2. Wicketのページを操作したいわけじゃなくて、単にサーバ側で計算処理をしたい

こちらの場合は、行いたい動作をする IResource の実装クラスを作って、その IResource を返す ResourceReference を用意して、Application の mountResource でURLと結びつければ良いです。望みのURLにIResourceを結合することが出来ます。

ただ、IResourceは Behavior と違ってなにかのページに張り付いているわけではないので、IResourceからページの操作は出来ないです。

---------------------------------------------------
矢野 勉(やの つとむ)
電子メール: t_yano****@me*****
---------------------------------------------------

On 2012/03/28, at 1:56, 浅野護 wrote:

> 浅野です。
> すみません。
> 書いている途中で送信してしまいました。
> 
> クライアント側には最初に送信したメールの内容のように記述しています。
> 何故このような調査しているかといいますと、WicketとExtJSのグリッドを連携したいと思っているのですが、「まずはjQueryのajaxを連携させてみよう」としています。
> ExtJSのサンプルコード(一部抜粋)は以下のようになるのですが、以下(URLが「select」)の場合、Seasar2のSAStrutsだとActionクラスに「select」メソッドを追加するだけでよかったのですが、「Wicketの場合はどのように記述すればよいのか?」と悩んでいます。
> 
> 
> Ext.onReady(function(){
>     var store = new Ext.data.Store({
>         proxy: new Ext.data.HttpProxy({
>             url: 'select',
>             method: 'POST'
>         }),
>    …
>     });
> 
> お忙しいところ申し訳ありませんが、よろしくお願いいたします。
> 
> 
> 2012年3月28日1:46 浅野護 <asano****@gmail*****>:
> 浅野と申します。
> 
> 現在Wicketを勉強中ですが分からないことがありますので質問させていただきました。
> 初歩的な質問で申し訳ありません。
> 
> jQueryのajaxメソッドをHTML側に直接記述したいのですが、Java側ではどのようにすればajaxリクエストが受信できるのでしょうか?
> 
> 	jQuery.ajax({
> 		dataType: "jsonp",
> 		url:"http://localhost:8080/s2wicket-test",
>         data: { 
>             "vq": keyword,
>             "max-results":"10",
>             "alt":"json-in-script"
>         },
> 		success:function(){
> 			alert("success");
> 		},
> 		error:function(){
> 			alert("error");
> 		}
> 	});
> 
> 
> _______________________________________________
> Wicket-ja-user mailing list
> Wicke****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user




Wicket-ja-user メーリングリストの案内
Back to archive index