-1

JSF2 フェイスレットを使用しています。

<ui:composition><ui:insert>タグを使用して、あるページから別のページにコードを挿入しようとしています。

ページ B のコードを含むページ A があります。

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

<h:form id="formIdPageB">

エラーが発生するため、問題はフォームIDのようです:

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

ページ A に挿入されるページ B のコードを次に示します。ここで 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>、フォーム内に移動しましたが、すべて問題ありません。

4

4 に答える 4

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

于 2012-05-04T11:31:47.610 に答える
1

ui:insert を正しく使用しているかどうかわかりません。Insert はプレースホルダーです。名前を付ける必要があります。次に、ui:define を使用してそのプレースホルダーにコードを配置します。あなたがやろうとしていることは、ui:insert タグを削除し、ページ A に ui:include を保持するだけでよいと思います。

于 2012-05-04T12:55:57.290 に答える
1

<ui:composition>入れたい部分をぐるぐる回します。それが何であるか、および を含めるか除外するかは、<body>完全にあなた次第です。

于 2012-05-04T12:39:14.897 に答える
0

問題は、PrimeFaces コンポーネントを使用して、次のようにページ A outside および outside に配置したことです。

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

それは間違っているようです。これでフォーム内に移動しましたが、すべて問題ありません。

于 2012-11-30T14:24:31.353 に答える