JSF托管bean方法没有被调用

时间:2013-11-07 11:45:31

标签: ajax jsf openfaces

我们目前正在开发一个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>元素中,并且没有多个表单。

  1. 当托管bean方法没有执行且没有错误跟踪时,可能的原因是什么?

  2. 将JSF <h:xxx>组件和<o:xxx>组件混合在一起会导致问题吗?

  3. 混合<o:ajax><f:ajax>会导致问题吗?

  4. 是否有可能在具有许多OpenFaces弹出窗口的复杂表单上,ajax功能可能会出错?

1 个答案:

答案 0 :(得分:0)

  

如果托管bean方法没有执行且没有错误跟踪,可能是什么原因?

您可以尝试像here所描述的那样打开日志记录。您还可以使用一些浏览器调试工具查看来自服务器的ajax响应,它可能包含一些错误信息。

  

可能会以相同的形式混合JSF组件和组件会导致问题吗?

不,共同的OF与JSF完全兼容。在一些非常复杂的情况下,你可能会遇到一些问题,但我不认为你描述过其中一种情况。

  

混合并导致问题?

混合它们是正常的。

  

是否有可能在具有许多OpenFaces弹出窗口的复杂表单上,ajax功能可能会出错?

当然有可能OF或甚至JSF都有一些错误,但通常你会在这种情况下列出一些错误信息。您也可以尝试更新到最新的每晚构建。或者将问题发布到OF支持论坛。