我想将ajax事件从浏览器发送到 Wicket 面板,以便它可以刷新标签的内容。我还需要从 javascript 函数发送此请求。
它有效 - 正在发送 ajax 请求,并且休息包含按预期更新的标签:
Ajax 请求:
http://localhost:8080/cyclop/cyclop/ced?1-3.IBehaviorListener.0-historyPanel&_=1392727280955
和响应:
<?xml version="1.0" encoding="UTF-8"?><ajax-response><component id="idf" ><![CDATA[<div id="idf">6</div>]]></component></ajax-response>
问题是,我还可以在网络监视器中看到另一个请求:它获取整个页面的内容。它本身不会重新加载页面,只是获取其内容。
这是什么原因?这正常吗?
编辑: 我能够更深入地研究它:wicket 触发两个 ajax 请求:
- localhost:8080/cyclop/cyclop/ced?2 - 这个返回整个页面
- localhost:15111/cyclop/cyclop/ced?2-11.IBehaviorListener.0-historyPanel - 这个 ajax 响应
这是代码:
包含触发 ajax 请求的链接的 HTML 页面部分:
<li><div class="cq-tabHistory">MY LINK</div></li>
以及注册 wicket 回调的 java 脚本:
$(".cq-tabHistory").on("click", function() { Wicket.Ajax.ajax({"u" : link, "c" : comp}); }
这是在服务器端注册ajax回调的wicket面板类
Label counter ;
public HistoryPanel(String id) {
super(id);
counter= new Label("counter", new IModel<String>() {
@Override
public String getObject() {
count++;
return count + "";
}
@Override
public void setObject(String o) {
}
@Override
public void detach() {
}
});
add(counter);
counter.setOutputMarkupId(true);
}
public void init() {
browserCallback = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
target.add(counter);
}
};
add(browserCallback);
browserCallbackUrl = browserCallback.getCallbackUrl().toString();
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(OnDomReadyHeaderItem.forScript(browserCallback.getCallbackScript()));
}
最佳答案
我发现了问题。
我的自定义 Java 脚本函数通过此类请求调用后端的 wicket 组件:
Wicket.Ajax.ajax({"u":"./ced?2-1.IBehaviorListener.0-historyPanel","c":"historyPanel17"});
为了在 Java 脚本中访问此 URL,我调用了设置全局 Java 脚本变量的自定义 Java 脚本函数 - 这发生在我的组件的方法 renderHead(IHeaderResponse response)
中。到目前为止没有什么奇怪的......
问题是我在创建 AbstractDefaultAjaxBehavior 之后过早地在构造函数中获得了回调 URL。这导致 1-0.IBehaviorListener.0-historyPanel
- 此 url 包含我的组件的不正确版本(其设置为 0)。调用 browserCallback.getCallbackUrl()
必须移动到 renderHead(IHeaderResponse response)
- 在这种情况下,它包含正确的组件 ID 和正确的版本
关于javascript - JavaScript 是否应该调用 Wicket.Ajax.ajax 触发页面重新加载(Wicket v6.13)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854387/