2

最近,我一直在努力将使用 wicket 1.4.18 的大型 Web 应用程序升级到 6.2。我们有一种情况,我们会创建 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中被视为文字字符串(例如:'value'而不是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 中为函数定义一个变量;

它将通过带有回调函数的 wicket 在 dom 就绪事件上初始化

从 javascript 调用 sendToServer(x,y) 将参数传递给服务器。

于 2014-05-09T01:34:06.783 回答
1
private static final String MY_PARAM = "myparam";
public static class SampleCallbackBehavior extends AbstractDefaultAjaxBehavior {        
    @Override
    public void renderHead(Component component, IHeaderResponse response) {
        super.renderHead(component, response);
        response.render(OnDomReadyHeaderItem.forScript("var myfunction : " + getCallbackFunction(CallbackParameter.explicit(MY_PARAM))));
    }
    @Override
    protected void respond(AjaxRequestTarget target) {
        StringValue paramValue = getComponent().getRequest().getRequestParameters().getParameterValue(MY_PARAM);
        //TODO handle callback
    }       
}

在此之后,您应该只从 javascript 调用该函数

myfunction("paramValue");
于 2014-03-13T16:15:42.097 回答