【问题标题】:sometimes ajax listener is not getting called in JSF commandlink有时在 JSF 命令中没有调用 ajax 侦听器link
【发布时间】:2013-04-27 23:41:34
【问题描述】:

我在网上搜索并尝试了很多东西,但没有任何结果...... 在我的 .xhtml 页面中有 7 个链接,它们是 JSf 命令链接,如下所示,

    <h:commandLink id="HeaderLink" value="Header">
        <f:ajax render="orderHeaderVOString" 
            onevent="updateHeaderVO"
            listener="#{OrderMBean.getOrderHeaderData}" />
    </h:commandLink>
    &nbsp;&nbsp;
    <h:commandLink id="orderLinesLink" value="Lines">
        <f:ajax render="orderLinesVOString" 
            onevent="updateLinesVO"
            listener="#{OrderMBean.getOrderLinesData}" />
    </h:commandLink> 

输入隐藏字段如下

    <h:inputHidden value="#{directCustViewOrderMBean.headerVOString}"
        id="orderHeaderVOString" />
    <h:inputHidden value="#{directCustViewOrderMBean.linesVOString}"
        id="orderLinesVOString" />

和javascript方法如下

    function updateHeaderVO(data) {
          if (data.status == 'success') {
        var orderHeaderVOString =    document.getElementById('viewOrderForm:orderHeaderVOString').value;
            var parsedJSON = eval("(" + orderHeaderVOString + ")");
             alert("success");
             }}

我的问题是当我在更改了 4 到 5 个页面后继续浏览页面时, 我收到错误“语法错误:输入意外结束”。这是因为没有调用侦听器方法,并且 'viewOrderForm:orderHeaderVOString' 中的数据将为空。为什么有时它被调用,有时它不被调用?

【问题讨论】:

  • 使用 JSON.parse 而不是 eval,因为如果要解析的字符串不是有效的 JSON,JSON.parse 将抛出 SyntaxError 异常,如果您使用 eval,则您正在评估每个可能的 JS 表达式。
  • 同时打开 firbug 或任何其他开发工具并验证是否发出了 ajax 请求。
  • 你有嵌套&lt;h:forms/&gt;吗?
  • 我也尝试过使用 JSON.parse,但仍然存在同样的问题。我只将它嵌套在
  • 我已经把 System.out.println();在 Mbean 方法的第一行并验证是否进行了 ajax 调用。

标签: ajax jsf-2 dojo ajax4jsf


【解决方案1】:

我得到了解决方案,它现在工作正常 问题出在

<h:inputHidden feilds

每次我浏览页面时,该值都保留在隐藏的字段中,因此不会发生 ajax 调用。 现在我每次都取消隐藏的字段。所以它工作正常,ajax调用正在发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多