我正在使用 JSF2 facelets。
我正在尝试使用<ui:composition>
和<ui:insert>
标签将一段代码从一个页面插入另一个页面。
我有页面 A,其中包含页面 B 中的代码。
<h:form id="formIdPageA">
...
<h:form id="formIdPageB">
问题似乎是表单 id,因为我收到错误:
System error: Cannot find component with identifier ":formIdPageA:fileListId" in view.
这是从页面 B 插入到页面 A 的一段代码。这里可以看到 id:
<tr>
<td colspan="2">
<p:selectOneMenu id="locationId" value = "#{PFMultiFileSelectMgmtBean.selectedLocationId}">
<p:ajax update=":formIdPageA:fileListId" listener="#{PFMultiFileSelectMgmtBean.LocationChangeEvent}"/>
<f:selectItems value="#{PFJobMgmtBean.outputLocationList}"/>
</p:selectOneMenu>
</td>
<td>
</td>
</tr>
<tr>
<td colspan="2">
<p:selectManyCheckbox id="fileListId" value="PFMultiFileSelectMgmtBean.selectedFiles" layout="pageDirection">
<f:selectItems value="#{PFMultiFileSelectMgmtBean.fileNames}" />
</p:selectManyCheckbox>
</td>
</tr>
这就是我将它插入页面 A 的方式:
<p:dialog id="basicDialog" header="Select Files" widgetVar="dlgMultiFileSelect" modal="true" height="500" width="500" resizable="false">
<ui:insert>
<ui:include src="/pageB.xhtml"/>
</ui:insert>
</p:dialog>
有谁知道是否可以包含这样的页面?<ui:composition>
是在正文标签之前还是在页面 B 之后?这个可以吗:
<body>
<f:view>
<h:form id="formIdPageB">
<ui:composition>...
?
好的,找到了:
问题是我使用了 PrimeFaces 组件<p:dialog>
并将其放置在页面 A outside<h:form>
和 outside<body>
中,如下所示:
</h:form>
</f:view>
</body>
<p:dialog...>
<ui:include src="/pageB.xhtml"/>
</p:dialog>
这似乎是错误的。现在我搬进了<p:dialog>
表格里面,一切都很好。