我们目前正在开发一个 JSF 2 应用程序,并且我们正在使用 OpenFaces。
我们注意到的一个“间歇性”问题是托管 bean 方法“有时”没有被调用。
例如:
<o:commandLink onclick="wait();" action="#{createAccountContractManagedBean.executeSave}"
execute="panGrp_createAccountContractMainTabLocal"
render="panGrp_createAccountContractLocalErrorMessages label_contractNumber pnlGrp_editCustomerGroup"
styleClass="buttonOrange"
onajaxend="wait();setTabFocus('inpHdn_contractErr','tabPane_MainLocal',3);return false;">
<span>
<h:outputLabel value="#{message['application.common.button.saveandcontinue']}"/>
</span>
</o:commandLink>
wait()
是一个 javascript 函数,显示请求当前正在处理的模式对话框。
setTabFocus()
是一个 javascript 函数,如果当前保存请求成功,则将焦点设置到新选项卡上。
public void executeSave() {
if (getLoggingService().isDebugLevelEnable()) {
getLoggingService().debug(this, "executeSave");
}
// ...
}
问题是有时托管 bean 方法executeSave()
根本不会触发。没有日志消息或错误。
但同时该onajaxend()
方法总是触发并且由于没有错误,它将焦点切换到下一个选项卡。
我们已经尝试删除wait();
和setTabFocus();
方法。
所有组件都在同一个<h:form>
元素中,没有多种形式。
当托管 bean 方法在没有错误跟踪的情况下无法执行时,可能的原因是什么?
混合 JSF
<h:xxx>
组件和<o:xxx>
相同形式的组件会导致问题吗?是否混合
<o:ajax>
并<f:ajax>
导致问题?是否有可能在具有许多 OpenFaces 弹出窗口的复杂表单上,ajax 功能可能会出现异常?