これができる場合、Wicket で JavaScript コード内から Java コード (メソッドなど) を呼び出すにはどうすればよいでしょうか。
4 に答える
えーと。正解は 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
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");
http://www.wicket-library.com/wicket-examples-6.0.x/index.html/には、参考になる例がたくさんあります。
または、DWR をご覧ください
DWR を使用すると、ブラウザーの Javascript がサーバー上の Java と対話できるようになり、結果を使用して Web ページを操作するのに役立ちます。
Dowardが述べたように、これはAJAX経由で行われます