p:在模板客户端中使用时未呈现的布局组件

时间:2011-12-01 19:39:33

标签: layout jsf-2 primefaces facelets

我正在使用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>

一切都很完美。使用第二个模板的任何页面都按预期渲染了组件。

如果有人能告诉我第一个模板的错误,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我不相信可以在<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>