【发布时间】: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>
<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 请求。
-
你有嵌套
<h:forms/>吗? -
我也尝试过使用 JSON.parse,但仍然存在同样的问题。我只将它嵌套在
-
我已经把 System.out.println();在 Mbean 方法的第一行并验证是否进行了 ajax 调用。