我的问题有奇怪的步骤。我在 Head 渲染阶段渲染了 ajax 行为
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
boolean undoEn = getRequest().getQueryParameters().getParameterValue("undoEn").toBoolean();
if (undoEn) {
mSaveButton.setEnabled(true);
target.add(mSaveButton);
}
}
};
public String getCallbackName() {
return "saveButtonVisibilityToggle";
}
@Override
public void renderHead(IHeaderResponse response) {
String script = getCallbackName() + " = function (e) { Wicket.Ajax.ajax({\"u\": \"" + behave.getCallbackUrl() + " + &undoEn=\"+e+\"\" });}";
response.render(OnDomReadyHeaderItem.forScript(script));
}
一切正常,每次在 tinyMCE 编辑器中更改节点时都会调用此行为
settings.addCustomSetting(" setup: function(editor) {" +
" editor.on('NodeChange', function(e) {" +
" editor.save();" +
getCallbackName() + "(editor.undoManager.hasUndo())" +
" });" +
" }");
但有时当我离开浏览器选项卡时,更改几个选项卡(chrome)然后使用其他应用程序几分钟,然后返回我们的选项卡,ajax url 不小心出现在浏览器 url 中。
http://localhost:8080/wicket/bookmarkable/com.tac.kulik.pages.SomePage?3-1.IBehaviorListener.0-contentPanel&entityId=2+++&undoEn=true
这也很奇怪,而不是normap参数传递它的++++符号
顺便说一句,这标志被识别为“2”,所以由于某种原因,“+”变成了空格
更新 1 使用@svenmeier 回答我已经页面开始的无限循环刷新。带原木
org.apache.wicket.core.request.mapper.StalePageException: A request to
page '[Page class = x.x.x.CardPage, id = 25, render count = 1]' has been
made with stale 'renderCount'. The page will be re-rendered.
实际上由于某种原因,行为链接的 renderCount 为 1,但表单为 0。来自浏览器的请求 jquery-1.12.4-ver-1476216952000.js:10254 XHR 完成加载:GET " http://localhost:8080/wicket/bookmarkable /com.tac.pages.ca ...?4-0.IBehaviorListener.0-contentPanel&cardId=1&_=1476873175645&undoEn=true"
我已经添加了一些 JS 来防止刷新,但是我仍然有 Stale 异常
"if (editor.undoManager.hasUndo()) { " +
" console.debug('Behave called ');" +
behave.getCallbackScript() +
" }" +
这是我的行为
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
log.info("Behave called");
boolean undoEn = getRequest().getQueryParameters().getParameterValue("undoEn").toBoolean();
if (undoEn) {
mSaveButton.setEnabled(true);
target.add(mSaveButton);
}
}
//
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
String undoEn = "return {'undoEn': editor.undoManager.hasUndo()};";
attributes.getDynamicExtraParameters().add(undoEn);
}
};
并且没有区别,它可以在没有任何实现的情况下表现,页面行为相同((
final AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {
@Override
protected void respond(AjaxRequestTarget target) {
}
};