我正在尝试将我们的应用程序从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。
任何人都可以帮助我吗?
由于
答案 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。