2

最近、私は wicket 1.4.18 を 6.2 に使用していた大きな Web アプリケーションのアップグレードに取り組んでいます。ドラッグ アンド ドロップ リスト内の位置を追跡するために JavaScript 変数を作成する状況がありました。js は常に機能しており、変更されていないため、これはコードのウィケット側にすぎません。

ListItem.add(new AbstractDefaultAjaxBehavior()
{
    private static final long serialVersionUID = 1L;

    @Override
    public void onComponentTag(ComponentTag tag)
    {
        tag.put("ondrop", "var value = $(ui.item[0]).attr('hiddenvalue');"
            + this.getCallbackScript());
    }


    @Override
    public final CharSequence getCallbackUrl()
    {
        return super.getCallbackUrl() + "&hiddenvalue' + value + '";
    }
}

ただし、私が直面している問題は、javascript 変数が値に解決されず、getCallbackUrl でリテラル文字列 (例: 5 ではなく「値」) として取得されていることです。これは wicket 1.4.18 には当てはまらず、1.5.8 への移行でこの問題が発生したとは思えません。

最終的には、次を使用して値を引き出せるようにしたいだけです。

@Override
protected void respond(AjaxRequestTarget target)
{
    getRequest().getRequestParameters().getParameterValue("hiddenvalue");
}

これに関するアドバイスはありますか?十分な情報を提供できたことを願っています。助けてくれてありがとう。これらのいくつかは、私の知識を少し超えており、どこを見ればよいか分からず、威圧的になる可能性があります.

4

3 に答える 3

4

Wicket Ajax は、Wicket 6 用に完全に書き直されました。詳細な説明については、このページを参照してください。

あなたの場合、次のように新しいAjaxRequestAttributesを使用する必要があります。

@Override
protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) {
    super.updateAjaxAttributes(attributes);
    attributes.getExtraParameters().put("hiddenvalue", "value");
}

リクエストからの値の取得は、以前と同じように機能します。

@Override
protected void respond(AjaxRequestTarget target)
{
    getRequest().getRequestParameters().getParameterValue("hiddenvalue");
}
于 2012-11-02T10:13:52.497 に答える
3

別のよりクリーンなアプローチは、コールバック関数を使用することです

        AbstractDefaultAjaxBehavior ajaxBehavior = new AbstractDefaultAjaxBehavior() {

        @Override
        protected void respond(AjaxRequestTarget target) {
            String param1Value = getRequest().getRequestParameters().getParameterValue(AJAX_PARAM1_NAME).toString();
            String param2Value = getRequest().getRequestParameters().getParameterValue(AJAX_PARAM2_NAME).toString();
            System.out.println("Param 1:" + param1Value + "Param 2:" + param2Value);
        }

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);
            String callBackScript = getCallbackFunction(CallbackParameter.explicit(AJAX_PARAM1_NAME), CallbackParameter.explicit(AJAX_PARAM2_NAME)).toString();
            callBackScript = "sendToServer="+callBackScript+";";
            response.render(OnDomReadyHeaderItem.forScript(callBackScript));
        }

    };
    add(ajaxBehavior);

JavaScript var sendToServer; で関数の変数を定義します。

コールバック関数を使用して、ウィケットによって dom Ready イベントで初期化されます。

javascript から sendToServer(x,y) を呼び出して、パラメーターをサーバーに渡します。

于 2014-05-09T01:34:06.783 に答える