使用绑定属性会导致javax.faces.FacesException:找不到具有标识符的组件

时间:2014-07-16 12:02:51

标签: jsf primefaces binding

我有一个问题我无法理解。

首先是上下文:我正在使用Primefaces 3.5开发一个Web应用程序(是的,不幸的是我现在仍然坚持使用这个旧版本),在JBoss 7上运行。

有一个带有id" form"的表单包含以下所有xhtml代码。

我的视图中有一个组件,它是由绑定属性的使用提供的:

<p:dashboard id="dashboard" binding="#{myBackingBean.dashboard}" />

然后有时我想对这个组件执行ajax更新,这是通过使用primefaces的RemoteCommand组件来完成的:

<p:remoteCommand
actionListener="#{myBackingBean.someActionListener()}"
process="@this" id="myRmtCmd" oncomplete="myJsFunction();"
update=":form:dashboard" name="myRemoteCommand" />

通过单击链接触发RemoteCommand:

<a href="#!" onclick="myRemoteCommand();">Some Text</a>

到目前为止这种方法效果很好。但是,在将此代码部署到生产之后,我有时会遇到FacesException:

javax.faces.FacesException: Cannot find component with identifier ":form:dashboard"
referenced from "form:myRmtCmd".

这就是我的问题所在,因为我无法可靠地重现此异常。我的问题是:什么可能导致抛出此异常?它似乎在95%的时间工作,但我是完美主义者(你们很多人也读到这一点,我确定;)我希望这段代码可以100%的时间工作。我错过了什么?

在回答之前,请考虑以下限制因素:

  • 是的,我必须使用绑定属性来提供仪表板,因为我需要对添加到组件的内容进行大量控制
  • 为了避免使用ID,我还尝试通过其中的一个主要表面来更新其css类的仪表板。高级选择器:@(。ui-dashboard) - 这也不起作用!
  • 是的,可以使用commandbutton / link而不是将remotecommand组件连接到一个简单的html链接,但在这种情况下,链接由JSF渲染器组件呈现,我在动态添加按钮时遇到了一些不好的经历等(由于JSF Spec Issue 790

干杯, P.S。

1 个答案:

答案 0 :(得分:0)

我也有这种奇怪的行为。

绑定到#{myBackingBean.dashboard}的组件可能不止一个,因此第一个组件设置了id,将没有一个名为“ dashboard ”的组件。