2012-05-04 47 views
-1

我正在使用JSF2 facelets。<ui:composition>在<body>之前还是之后?

我试图插入一段代码从一个页面到另一个使用<ui:composition><ui:insert>标签。

我有一个页面,其中包括来自网页B.

<h:form id="formIdPageA"> 代码...

<h:form id="formIdPageB">

这个问题似乎是表单ID,因为我得到错误:

System error: Cannot find component with identifier ":formIdPageA:fileListId" in view.

这是从页面B的一段代码g ETS插入到页面A.这里IDS可以看出:

    <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> 

这就是我如何将它插入页面答:

<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外<h:form>内外<body>,像这样:

</h:form> 
</f:view>  
</body> 
<p:dialog...>   
    <ui:include src="/pageB.xhtml"/>  
</p:dialog> 

这似乎是错误。现在我移动了<p:dialog>里面的形式,一切都好。

回答

0

问题是我使用PrimeFaces组件并将它放在页面A的外部和外部,像这样:

</h:form> 
    </f:view>  
</body> 
<p:dialog...>   
    <ui:include src="/pageB.xhtml"/>  
</p:dialog> 

这似乎是错误的。现在我移动到表格中,一切都很好。

1

插入以及组成是JSF中的模板工具。当您使用ui:insert时,可以使用您的模板在页面中创建一个可插入的插入点(使用ui:define)。下面是如何以正确的方式模板和组合使用教程:

http://www.ibm.com/developerworks/java/library/j-jsf2fu2/index.html

如果我没有理解好,你需要重用的代码块在页面A和B.页所以我会提取代码放在一个单独的文件中,并将其包含到页面A和页面B.

如果您想将< ui:composition>放入< body>内,则允许。你可以看到文档例如:

http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/composition.html

+0

但是我试了一下,我得到错误:'系统错误:无法找到带有标识符的组件:formIdPageA:fileListId“in view.'嗯......任何想法?我如何参考表单组件? – Danijel

+0

你可以尝试formIdPageA:fileListId删除:在开始。 –

+0

刚试过,没有工作。我在其他地方使用':'并且工作,所以我也在这里使用它。 – Danijel

1

<ui:composition>善有善报要包含的部分。那是什么,以及它是否包含<body>完全取决于您。

+0

谢谢。问题是无论我尝试,我得到的错误:'系统错误:无法找到具有标识符的组件:formIdPageA:fileListId“in view.'如何引用页面B中的表单组件?通过页面A中的表单? – Danijel

+0

你不需要ui:insert。 ui:include是插入。 – EJP

+0

好的,但仍然收到与上面相同的错误。 ? – Danijel

1

我不确定你是否在使用ui:正确插入。插入是一个占位符。你需要给它一个名字。然后,您使用ui:define将代码放入该占位符中。我认为你所要做的只是删除ui:insert标签并保留页面A中的ui:include。

+0

这没有帮助。无论我尝试什么,我都会收到错误:'System error:Can not find component with identifier“:formIdPageA:fileListId”in view.'如何引用页面B中的表单组件?通过页面A中的表单ID?为什么它不起作用? – Danijel

+0

我相信因为它都是以formIdPageB形式存在的,所以可以引用(例如):fileListId。如果您的页面正在渲染,则可以使用Firebug帮助您确定正确的组件ID和引用。 – SteveS

相关问题