我知道我们不能重复我们在同一视图树中拥有的任何组件的 ID。
我有一个页面,其中包含某些条件下的其他页面像这样......
<h:panelGroup rendered="#{bean.insertMode == 'SINGLE'}">
<ui:include src="_single.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{bean.insertMode == 'DOUBLE'}">
<ui:include src="_double.xhtml" />
</h:panelGroup>
现在在这些页面中,我有“几乎”相同的组件层次结构(复杂),具有不同的操作行为(不仅是方法调用,还有视图),例如:
_single.xhtml
<p:inputText id="fieldID" value="#{bean.value}" />
<p:commandLink actionListener="#{bean.singleAction()}" />
_double.xhtml
<p:inputText id="fieldID" value="#{bean.value}" />
<p:commandLink actionListener="#{bean.doubleAction()}" />
我的小例子工作正常,并按预期呈现,但我明白了
java.lang.IllegalStateException: Component ID fieldID has already been found in the view.
我知道 JSF 会处理整个页面,即使它们不包括在内,这就是我收到此异常的原因。
在不更改包含页面内组件 ID 的情况下解决此问题的任何智能方法(虽然它有效,但异常很烦人并且似乎有问题)。
我也不想用一些具有不同 ID 的容器组件包装每个页面,因此它们将具有不同的 FULL ID,例如 formId:fieldID,因为母版页也指的是这些包含中的这些组件!