1

我们目前正在开发一个 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 功能可能会出现异常?

4

1 回答 1

0

当托管 bean 方法在没有错误跟踪的情况下无法执行时,可能的原因是什么?

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

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

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

是否混合会导致问题?

混合它们是正常的。

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

当然,OF 甚至 JSF 中可能存在一些错误,但通常在这种情况下您会得到一些错误信息。您也可以尝试更新到最新的夜间版本。或将您的问题发布到 OF 支持论坛。

于 2013-11-25T10:28:49.297 回答