我正在使用Java Server Faces,JQuery和JavaScript。我想我在Firefox中发现了一个错误。 此JavaScript代码被触发:
var list = jQuery('input.myclass');
var item = list.eq(0);
item.click();
top.location.reload(true);
点击将点击a4j:commandButton,它与我的动作方法'mybean.myaction()'相关。如果我使用的是Firefox 19或Firefox 18,可能会点击该按钮。无论如何,页面的重新加载发生得太快了。我可以通过在mybean.myaction()中设置Eclipse断点来看到这一点 - 断点永远不会到达。
如果我使用的是Firefox 17,InternetExplorer的所有作品像预期的那样,得到的Javascript触发,点击情况,豆方法调整Bean的状态和页面重新加载得到。
提前感谢您提供了一些如何澄清此行为原因的想法。如果合适,我将在Firefox bugzilla中提交一个错误。
更新:这是a4j:commandButton,被JQuery点击;
<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass">
<a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" /></a4j:commandButton>
UPDATE-2:我玩了解决问题。我在块周围放置了一个try-catch-statement,而且我替换了reload(),我将能够遵循javascript执行。现在,我可以看到,如果我输入top.location.host,我将跳转到catch块,但我的errorText是'undefinded'。怎么会发生这种情况?我该怎么做才能找到更多这个例外?
try{ ...
item.click();
// Firefox-Bug in Version ab 18.0.1
var res = top.location.host; //top.location.reload(true);
} catch (e) {
var errorText = e.message; // errorText is undefined!
alert("Exception: " + errorText);
}
UPDATE-3:它得到陌生人和陌生人...如果余设置萤火虫-断点item.click()和top.location.reload(真)之间;一切都很好!因此,问题可能是a4j。也许今天退出是明智的。感谢您迄今为止的所有帮助!
答案 0 :(得分:2)
这不是问题的答案,而是关于如何解决问题的建议。因此,您可以使用commandButton的oncomplete属性在操作完成后重新加载页面:
<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass" oncomplete="top.location.reload(true);">
<a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" />
</a4j:commandButton>
这样就可以序列化事件:首先调用操作,并且只在重新加载页面之后。当然,您需要从JavaScript代码中删除top.location.reload(true);
。
编辑:更多地思考这个问题...而且我认为这不是一个错误。在任何地方都不需要Firefox等到服务器上处理您的点击事件(Richfaces的复杂操作)。它将click事件发送到Richfaces javascript并转到下一个语句:top.location.reload(true);
。你需要防止这个问题。