我正在使用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>
并将其放在<h:form>
之外和<body>
之外的页面A中,如下所示:
</h:form>
</f:view>
</body>
<p:dialog...>
<ui:include src="/pageB.xhtml"/>
</p:dialog>
这似乎是错误的。现在我将<p:dialog>
移到了表单中,一切正常。
答案 0 :(得分:1)
插入和组合是JSF中模板化的工具。使用ui:insert时,可以使用模板在页面中创建可插入(使用ui:define)的插入点。以下是如何以正确的方式使用模板和组合的教程:
http://www.ibm.com/developerworks/java/library/j-jsf2fu2/index.html
如果我理解得很清楚,你需要在页面A和页面B中重用一段代码。所以我会在单独的文件中提取代码并将其包含在第A页和第B页。
如果你想把你的&lt; ui:composition&gt;在&lt; body&gt;内,允许。您可以看到文档示例:
http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/composition.html
答案 1 :(得分:1)
<ui:composition>
围绕您想要包含的部分。这是什么,以及它是否包含或排除<body>
,完全取决于您。
答案 2 :(得分:1)
我不确定您使用的是ui:正确插入。插入是一个占位符。你需要给它一个名字。然后使用ui:define将代码放在该占位符中。我认为你想要做的只需要删除ui:insert标签并保留ui:include在第A页。
答案 3 :(得分:0)
问题是我使用PrimeFaces组件并将其放在页面A的外部和外部,如下所示:
</h:form>
</f:view>
</body>
<p:dialog...>
<ui:include src="/pageB.xhtml"/>
</p:dialog>
这似乎是错误的。现在我搬进了表格,一切都很好。