2

Wicketを使用してアプリケーションを構築したいのですが、JavaScriptを記述/保守したいデザイナーがいて、基本的に1ページに1つのJSセグメントとグローバルなJSファイルを期待しています。ウィケットにjavascriptを追加する最も自然な方法は、コンポーネントごとに(ページごとではなく)追加することだと思います。これにより、これらの設計者にとって問題が発生します(javascriptが細分化され、javaファイルに書き込む必要があります)。これを解決するためのより良い方法はありますか?(もちろん、部分的に更新した後でも機能することを期待しています。)

そして、彼らが望んでいる(そして私が実際に望んでいる)2番目の(関連する)ことは、静的リンクを介してJSON形式で情報を要求する可能性です。これはWicketで可能ですか?

4

4 に答える 4

3

私はウィケットページにJSONを返すようにすることで、JSONから始めましたが、特に完全なWebサービスレイヤーがある場合は、その仕事に適したツールがあることにすぐに気付きました。あちこちで小さなJSONが必要な場合は、常にGETを使用して、Wicketページを作成してください。

結局、Wicketと一緒にJacksonと一緒にJerseyを使用することになりました。Jerseyは、さまざまなhttpメソッド(GET / POST / PUT / DELETE)でさまざまなことを実行できるURLの構成を簡素化し、クエリ文字列などを簡単に解析します。より重いJSONのニーズには、このルートを使用することを検討します。

小さなweb.xml構成を使用して、同じWebアプリケーションでWicketとJerseyの両方を簡単に実行できます。

于 2010-06-02T16:08:32.373 に答える
1

次のコードを使用して、Wicketと動的に通信できます。

AbstractDefaultAjaxBehavior callme = new AbstractDefaultAjaxBehavior(){
        @Override
        protected void respond(AjaxRequestTarget target) {
        }
};
page.add(callme);


//From any ajaxrequesttarget you can simply append the following code:
target.appendJavascript("wicketAjaxGet('"+callme.getCallbackUrl()+");");

このようにして、ajaxrequestをWicket側に転送するajaxlinkなどを作成できます。データを渡したい場合(静的リンクはそのようには聞こえませんが)、次のようにします。

"wicketAjaxGet('"+callme.getCallbackUrl()+"&x='+value_to_pass_back''";
//to Read the value in the respond:
String x = RequestCycle.get().getRequest().getParameter("x");

したがって、コールバックへのURLは動的に生成されます(コールバックURLはセッションに固有であるため)が、他のURLと同じように形成されます。

私にとって、これは、組み込みのJSONシステムを使用する代わりに、改札の上にJSONシステムを構築するよりも10倍簡単です。私はこれを常に使用しており、少なくとも私にとってはうまく機能します。あなたの解決策が異なる/より良い場合、私はおそらくその理由を知りたいです。

于 2010-06-07T23:34:21.647 に答える
1

2番目の質問に対する簡単な答えは「はい」です。それは可能です。ブックマーク可能なリンクを使用して、JSONデータを返すリソースにアクセスします。

于 2010-05-17T07:15:22.307 に答える
1

Wicket のビルトイン AJAX サポートは常にステートフルであるため、URL を変更してアクセスできます。デザイナーが Wicket の JS ライブラリを使用する予定がない場合、JSON ページをマウントするのは非常に簡単です。

public class JsonReturningPage extends WebPage {
  public JsonReturningPage(PageParameters params) {
    String json = "{foo: 4711}";
    IRequestTarget t = new StringRequestTarget("application/json", "UTF-8", json);
    getRequestCycle().setRequestTarget(t);
  }
}

または、独自に実装してfromAbstractRequestTargetUrlCodingStrategyを直接返し、それをアプリケーションにマウントすることもできます。IRequestTargetIRequestTarget decode(RequestParameters params)

JS ファイルに関しては、コンポーネントごとに 1 つのファイルを使用するように教育しようと思います。これには確かに、コピーと貼り付けのコードが少なくなり、メンテナンスが簡単になるという利点があります。さらに、Java コードで JS を使用することは絶対にお勧めしません。通常、変数定義またはメソッド呼び出しのいずれかとして、データまたは構成を JS に渡すためにのみ必要です。このデータは通常 Java であり、JS はデザイナーによって作成されるため、デザイナーとプログラマーがチームを組む時が来ました。

于 2010-05-17T08:00:26.593 に答える