2012-05-04 52 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

相關問題