我们有一个JSF / Tomcat / Hibernate / Oracle应用程序,我们希望升级到Java 8.我们使用Eclipse进行开发。升级到Java 8(jdk 8)以及升级到Eclipse Luna和Tomcat 7.0.54后,我们遇到了两个问题。不太严肃的是,一些图形渲染具有新的外观,不像以前那么好。更严重的问题是我们有一个双表单提交预防脚本,现在导致我们的h:commandLink组件挂起。点击这样的链接后,URL会附加一个#,随后点击链接(或页面上的其他按钮)会显示我们的警告“已经提交 - 请稍候...”,它来自我们的脚本。我们的脚本是:
// Prevent double form submissions
var defaultSubmit = null;
var formSubmitted = false;
function initForm() {
if (defaultSubmit == null) {
defaultSubmit = document.forms[0].submit;
document.forms[0].submit = submitForm;
document.forms[0].onsubmit = checkFormSubmission;
}
formSubmitted = false;
}
function checkFormSubmission() {
if (formSubmitted) {
alert('Already submitted - please wait...');
return false;
} else {
formSubmitted = true;
return true;
}
}
function submitForm() {
if (checkFormSubmission()) {
if (defaultSubmit != null) {
return defaultSubmit();
}
}
return false;
}
</script>
上面的脚本是jsp文件的一部分,该文件包含在我们应用程序中的许多其他jsp文件中。它使用jdk 5,6和7运行良好,但现在有问题。 h:commandButton的工作正常,但是h:commandLink导致应用程序挂起,如上所述。如何修复它以使用jdk 8?
答案 0 :(得分:0)
使用h:commandLink在线搜索onsubmit表明onclick是一个更好的选择,这可以解决我们的主要问题。首先,我们需要替换&#34; h:commandLink ...&#34; by&#34; h:commandLink onclick =&#34; return checkFormSubmission();&#34; ......程序中的任何地方。我们的脚本也需要被新脚本替换:
var initialized = false;
var formSubmitted = false;
function initForm() {
if (initialized == false) {
document.forms[0].onsubmit = checkFormSubmission;
initialized = true;
}
formSubmitted = false;
}
function checkFormSubmission() {
if (formSubmitted) {
alert('Already submitted - please wait...');
return false;
} else {
formSubmitted = true;
return true;
}
}
完成上述所有更改后,我们的双击保护将再次按预期工作。一旦在h:commandLink或h:commandButton上进行了点击,随后的点击会弹出警告告诉用户:&#34;已经提交 - 请等待......&#34;,此警报显示为no随后按下h:commandLink或h:commandButton的问题。这是我们理想的行为。