¿Cómo incluir otro XHTML en XHTML usando JSF 2.0 Facelets?

¿Cuál es la forma más correcta de incluir otra página XHTML en una página XHTML? He estado probando diferentes maneras, ninguna de ellas está funcionando.

La forma más básica es . El contenido incluido debe colocarse dentro de .

Ejemplo de inicio de la página maestra /page.xhtml :

    Include demo   

Master page

Master page blah blah lorem ipsum

La página de inclusión /WEB-INF/include.xhtml (sí, este es el archivo en su totalidad, las tags fuera de son innecesarias ya que son ignoradas por Facelets de todos modos):

  

Include page

Include page blah blah lorem ipsum

Esto debe ser abierto por /page.xhtml . Tenga en cuenta que no necesita repetir , y dentro del archivo de inclusión ya que de lo contrario se produciría un HTML no válido .

Puede usar una expresión EL dinámica en . Consulte también How to ajax-refresh dynamic include content by navigation menu? (JSF SPA) .


/

Una forma más avanzada de incluir es la creación de plantillas . Esto incluye básicamente al revés. La página de plantilla maestra debe usar para declarar lugares para insertar contenido de plantilla definido. La página del cliente de la plantilla que está utilizando la página de la plantilla maestra debe usar para definir el contenido de la plantilla que se va a insertar.

Página de plantilla maestra /WEB-INF/template.xhtml (como sugerencia de diseño: el encabezado, el menú y el pie de página también pueden ser files):

    <ui:insert name="title">Default title</ui:insert>     
Default content

Página de cliente de plantilla /page.xhtml (observe el atributo de template ; también aquí, este es el archivo en su totalidad):

   New page title here   

New content here

Blah blah

Esto debe ser abierto por /page.xhtml . Si no hay , entonces se mostrará el contenido predeterminado dentro de , en su caso.


Puede pasar parámetros a o por .

    
   ...  

Dentro del archivo include / template, estará disponible como #{foo} . En caso de que necesite pasar “muchos” parámetros a , entonces será mejor que considere registrar el archivo de inclusión como un archivo de etiqueta, para que finalmente pueda usarlo como . Consulte también ¿ Cuándo utilizar , archivos de tags, componentes compuestos y / o componentes personalizados?

Incluso puede pasar frijoles enteros, métodos y parámetros a través de . Ver también JSF 2: cómo pasar una acción que incluye un argumento para ser invocado a una subvista Facelets (usando ui: include y ui: param)?


Consejos de diseño

Los archivos que no se supone que sean de acceso público solo ingresando / adivinando su URL, deben colocarse en la carpeta /WEB-INF , como el archivo de inclusión y el archivo de plantilla en el ejemplo anterior. Ver también ¿Qué archivos XHTML necesito poner / WEB-INF y cuáles no?

No es necesario que haya ningún marcado (código HTML) fuera de y . Puedes poner cualquiera, pero serán ignorados por Facelets. Poner marcas allí solo es útil para los diseñadores web. Ver también ¿Hay alguna manera de ejecutar una página JSF sin construir todo el proyecto?

El doctype HTML5 es el tipo de documento recomendado en estos días, “a pesar de” que es un archivo XHTML. Debería ver XHTML como un lenguaje que le permite producir resultados HTML utilizando una herramienta basada en XML. Ver también ¿Es posible usar JSF + Facelets con HTML 4/5? y el soporte de JavaServer Faces 2.2 y HTML5, ¿por qué XHTML todavía se está utilizando ?

Los archivos CSS / JS / de imagen se pueden incluir como recursos dinámicamente reubicables / localizados / versionados. Consulte también ¿Cómo hacer referencia al recurso CSS / JS / image en la plantilla Facelets?

Puede poner archivos Facelets en un archivo JAR reutilizable. Consulte también Estructura para múltiples proyectos JSF con código compartido .

Para ver ejemplos del mundo real de la creación avanzada de plantillas Facelets, consulte la carpeta src/main/webapp webapp del código fuente de la aplicación Java EE Kickoff y el código fuente del sitio showcase de OmniFaces .

Página incluida:

    

Incluyendo la página:

   
  • Usted inicia su archivo xhtml incluido con ui:composition como se muestra arriba.
  • Incluye ese archivo con ui:include en el archivo xhtml incluido como también se muestra arriba.