检票6.2 AbstractDefaultAjaxBehavior getCallbackUrl不再

2019-07-03 11:59发布

最近,我一直在努力升级的使用检票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)。 这是不是在检票口1.4.18的情况下,我不相信这个问题源自于我们移植到1.5.8。

最后,我们只是希望能够拉出来的值用

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

在这个有什么建议? 我希望我已经提供了足够的信息。 在此先感谢您的帮助。 一些这有点超出了我的知识,可以恐吓,不知道去哪里找。

Answer 1:

检票阿贾克斯已完全重写检票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");
}


Answer 2:

另一种更简洁的方法是使用回调函数

        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变种sendToServer功能的变量;

它将在DOM已准备就绪事件通过检票口与回调函数初始化

从JavaScript调用sendToServer(X,Y)的参数传递到服务器。



Answer 3:

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");


文章来源: Wicket 6.2 AbstractDefaultAjaxBehavior getCallbackUrl no longer resolves JS variables