15

これができる場合、Wicket で JavaScript コード内から Java コード (メソッドなど) を呼び出すにはどうすればよいでしょうか。

4

4 に答える 4

14

えーと。正解は ajax コールバックです。js を手動でコーディングして wicket js にフックするか、Java で wicket コンポーネントからコールバックを設定することができます。たとえば、AjaxLazyLoadPanel から:

        component.add( new AbstractDefaultAjaxBehavior() {

        @Override
        protected void respond(AjaxRequestTarget target) {
            // your code here
        }

        @Override
        public void renderHead(IHeaderResponse response) {
            super.renderHead( response );
            response.renderOnDomReadyJavascript( getCallbackScript().toString() );
        }

        }

この例は、Wicket の任意のコンポーネントにコールバック コードを追加する方法を示しています。ブラウザーで OnDomReady イベントが発生した後、ページをロードすると、Wicket は js エンジンを呼び出し、Ajax を使用して上記の「respond」メソッドにコードを呼び出します。この時点で、サーバー上で Java コードを実行できます。サーバー、および再レンダリングする ajax ターゲットにコンポーネントを追加する可能性があります。

js から手動で行うには、getCallbackScript().toString() を wicket コンポーネントの属性に出力することで wicket のシステムにフックできます。これにより、js からアクセスできるようになります。wicket-ajax.js から wicket の wicketAjaxGet を使用して、手動で js からこの URL を呼び出します。

このトピックに関する多くの会話については、メーリング リストをご覧ください: http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438

于 2009-07-18T07:15:04.790 に答える
5

https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.htmlからの抜粋

AbstractDefaultAjaxBehavior を拡張するクラスをページに追加すると、wicket-ajax.js が Web ページのヘッダーに追加されます。wicket-ajax.js は、コンポーネントを呼び出すための 2 つの基本的な方法を提供します。

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel)

function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel)

次に例を示します。

JavaScript

function callWicket() {
   var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { });
}

$url$メソッドから取得されabstractDefaultAjaxBehavior.getCallbackUrl()ます。そのメソッドから返された文字列をブラウザに貼り付けると、respond メソッドが呼び出されます。同じことが javascript メソッドにも当てはまります。

これらの引数を URL 文字列に追加することで、必要に応じて引数を追加できます。彼らはフォームを取り&foo=barます。

次のように、Java 応答メソッドでオプションの引数を取得します。

Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap();

またはこれ:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo");
于 2010-08-26T04:59:12.873 に答える
3

http://www.wicket-library.com/wicket-examples-6.0.x/index.html/には、参考になる例がたくさんあります。

または、DWR をご覧ください

http://directwebremoting.org/

DWR を使用すると、ブラウザーの Javascript がサーバー上の Java と対話できるようになり、結果を使用して Web ページを操作するのに役立ちます。

Dowardが述べたように、これはAJAX経由で行われます

于 2008-10-02T16:01:46.497 に答える
0

クライアントで JavaScript が実行されていると仮定すると、HTTP リダイレクトがサーバーに対して行われ、サーブレットが指定された URL の要求に反応するようになります。

これはAjaxとして知られており、これを行うのに役立つライブラリが多数あります。

于 2008-10-02T15:30:30.940 に答える