javascript - JavaScript 是否应该调用 Wicket.Ajax.ajax 触发页面重新加载(Wicket v6.13)?

标签 javascript wicket

我想将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 请求:

  1. localhost:8080/cyclop/cyclop/ced?2 - 这个返回整个页面
  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/

相关文章:

javascript - 如何访问 Angular UI 网格中已排序的行?

javascript - 如何在输入之间传输值

javascript - Javascript "this"运算符如何处理范围?

parameters - RenderStrategy.ONE_PASS_RENDER 是一种在 Wicket 应用程序中摆脱 ?1 等页面版本参数的合理方法吗?

java - 如何在几秒钟内自动从一个页面重定向到另一页面

java - 在 wicket7 中填写表格并输入 key 提交

javascript - angularjs md checkbox获取选中的值

java - 衍生项目中如何将jar资源加载到META-INF\resources中?

java - Apache Wicket - DropDownChoice 实时搜索

javascript - Node.js 使用 async.forEach 进行异步操作