迁移到Wicket 7 - js生成组件ajax问题

时间:2015-09-16 15:45:45

标签: ajax migration wicket

我正在尝试将我们的应用程序从Wicket 6.19迁移到Wicket 7.除了javascript库生成的自定义动态组件外,一切正常 - 这些组件上的ajax行为无法在Wicket 7上运行。

示例:我们可以从bootstrap中搜索下拉列表:

public class SearchableDropDown<T> extends DropDownChoice<T> {
...
@Override
public void renderHead(IHeaderResponse response) {
    String jqScript = "  $('#" + getMarkupId() + "').select2();";
    response.render(OnDomReadyHeaderItem.forScript(jqScript));
}
...

}

然后使用ajax更改侦听器:

SearchableDropDownChoice<String> choice= new SearchableDropDownChoice("choice", model);

choice.setNullValid(true);

choice.add(new AjaxFormComponentUpdatingBehavior("change") {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            // DO SOMETHING
        }
    });

这适用于Wicket 6,但Wicket 7从不调用onUpdate。我查看了生成的回调javascript页面广告,它看起来很相似

Wicket 6:

Wicket.Ajax.ajax({"c":"choice76","ad":true,"u":"./page?14-2.IBehaviorListener.0-pageStyleClassWrapperPanel-choicePanel-content-choice","e":"change","m":"POST"});;
Wicket.Ajax.ajax({"c":"choice76","ad":true,"u":"./page?14-2.IBehaviorListener.1-pageStyleClassWrapperPanel-choicePanel-content-choice","e":"blur","m":"POST"});;

Wicket 7:

Wicket.Ajax.ajax({"u":"./page?6-2.IBehaviorListener.0-pageStyleClassWrapperPanel-choicePanel-content-choice","m":"POST","c":"choice3e","e":"change"});;
Wicket.Ajax.ajax({"u":"./page?6-2.IBehaviorListener.1-pageStyleClassWrapperPanel-choicePanel-content-choice","m":"POST","c":"choice3e","e":"blur"});;

我们也有其他生成组件的类似问题,例如来自icheck jquery lib的radiobuttons。

任何人都可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

我有同样的症状:从Wicket 1.4直接迁移到Wicket 7.9后,Ajax行为无效。

就我而言,原因是:jquery javascript来源coudn未加载。他们被禁止服务。

我的应用程序使用了AuthStrategy类,它有一个方法:

@Override
public boolean isResourceAuthorized(IResource arg0, PageParameters arg1) {
    return false;
}

因此,jquery js源无法加载。将返回值更改为True可以解决问题。

似乎通过该方法传递的唯一资源是那些jquery javascripts。