2012-05-25 22 views
6

¿Es posible algo como esto en jsf?JSF 1.2: ¿Puedo crear un componente reutilizable dentro de la vista JSF

<ui:composition> 
    <x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode> 
    code... 
    <x:use component="editScreen"/> 
</ui:composition 

sé que puedo crear mi propio componente y registrarlo en JSF TagLib, pero necesito HTML reutilizable sólo en el archivo de vista JSF.

+0

¿Estás utilizando JSF 2.0? –

+0

Lo siento, lo olvido agregue esto al resumen. Yo uso 1.2 – Daggeto

Respuesta

4

En Facelets 1.x puede crear un archivo de etiqueta para este fin.

Aquí hay un ejemplo básico de inicio. Crear /WEB-INF/tags/some.xhtml:

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <h:outputText value="#{foo}" /> 
</ui:composition> 

definirlo en /WEB-INF/my.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE facelet-taglib PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" 
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib> 
    <namespace>http://example.com/jsf/facelets</namespace> 
    <tag> 
     <tag-name>some</tag-name> 
     <source>/WEB-INF/tags/some.xhtml</source> 
    </tag> 
</facelet-taglib> 

verlo en /WEB-INF/web.xml:

<context-param> 
    <param-name>facelets.LIBRARIES</param-name> 
    <param-value>/WEB-INF/my.taglib.xml</param-value> 
</context-param> 

(nota, cuando usted tiene múltiples, utilice punto y coma ; para separarlos)

Por último, solo tiene que declararlo en sus plantillas de página principal.

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:my="http://example.com/jsf/facelets" 
> 
    <my:some foo="value1" /> 
    <my:some foo="value2" /> 
    <my:some foo="value3" /> 
</ui:composition> 

Un ejemplo más avanzado se puede encontrar aquí: How to make a grid of JSF composite component? Nota: JSF 2.0 dirigido, pero con pequeños cambios basados ​​en ejemplo anterior es que funciona tan bien en Facelets 1.x.

+0

Gracias por este enfoque, pero pensé que hay un método para crear componentes reutilizables dentro de un archivo jsf, sin ningún registro de etiqueta. :) – Daggeto

+0

Esto funciona, excepto para el elemento ' /WEB-INF/tags/some.xhtml' en 'my.taglib.xml'. Tuve que cambiarlo a ' tags/some.xhtml' para que funcione. – acdcjunior

Cuestiones relacionadas