我们目前正在开发一个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功能可能会出错?
答案 0 :(得分:0)
如果托管bean方法没有执行且没有错误跟踪,可能是什么原因?
您可以尝试像here所描述的那样打开日志记录。您还可以使用一些浏览器调试工具查看来自服务器的ajax响应,它可能包含一些错误信息。
可能会以相同的形式混合JSF组件和组件会导致问题吗?
不,共同的OF与JSF完全兼容。在一些非常复杂的情况下,你可能会遇到一些问题,但我不认为你描述过其中一种情况。
混合并导致问题?
混合它们是正常的。
是否有可能在具有许多OpenFaces弹出窗口的复杂表单上,ajax功能可能会出错?
当然有可能OF或甚至JSF都有一些错误,但通常你会在这种情况下列出一些错误信息。您也可以尝试更新到最新的每晚构建。或者将问题发布到OF支持论坛。