p: компонент макета не отображается при использовании в шаблонном клиенте - PullRequest
1 голос
/ 01 декабря 2011

Я использую JSF 2.0 и PrimeFaces 2.2.1. В моем template.xhtml у меня есть ui:insert компонент:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui">
   <h:head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>A page</title>
   </h:head>

   <h:body>
      <ui:insert name="content"></ui:insert>
   </h:body>
</html>

В myPage.xhtml, который использует вышеупомянутый шаблон, я определил компонент <p:layout> следующим образом:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./../template/template.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core">

   <ui:define name="content">
      <p:layout>
         <p:layoutUnit position="center">  
            Center unit
         </p:layoutUnit>

         <p:layoutUnit position="right" collapsible="true">  
            Right unit
         </p:layoutUnit>  
      </p:layout> 
   </ui:define>

</ui:composition>

Когда я открыл myPage.xhtml, я увидел «Центральный блок» и «Правильный блок», но не увидел ни одного макета.

Однако, когда я попытался поместить компонент <p:layout> в шаблон, как показано ниже:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui">
   <h:head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <title>A page</title>
   </h:head>

   <h:body>
      <p:layout>
         <p:layoutUnit position="center">  
            <ui:insert name="center"></ui:insert>
         </p:layoutUnit>

         <p:layoutUnit position="right" collapsible="true">  
            <ui:insert name="right"></ui:insert>
         </p:layoutUnit>  
      </p:layout> 

   </h:body>
</html>

все работает отлично. Любые страницы, которые используют 2-й шаблон, визуализировали компонент, как и ожидалось.

Буду очень признателен, если кто-нибудь скажет мне, что я сделал неправильно с первым шаблоном.

1 Ответ

0 голосов
/ 02 декабря 2011

Я не верю, что можно использовать <p:layout> в <ui:define>.

Вы можете использовать <ui:insert> в <p:layoutUnit>, однако:

<p:layout>
    <p:layoutUnit position="center">
           <ui:insert name="Center unit" />
    </p:layoutUnit>
    <p:layoutUnit position="right" collapsible="true">
           <ui:insert name="Right unit" />
    </p:layoutUnit>
</p:layout>
...