enrique-j
8/25/2017 - 4:37 PM

Componentes, inyección, internacionalización.md

#Tapestry 5, parte 3

#Componente

componentes (unidades funcionales que pueden ir contenidas en páginas o dentro de otros componentes)

 <!-- Marco.tml -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
  xmlns:p="tapestry:parameter">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  <title>${title}</title>
</head>
<body>
<!-- imaginense que aqui van unas ligas, encabezados, etc etc -->
<!-- ahora aqui vamos a incluir el cuerpo de la pagina -->
<t:body />
<!-- y al final el pie de pagina -->
<div>Copyright 2009 blablabla</div>
</body></html>

Las partes interesantes de lo anterior son: El encabezado tiene un ${title} que a continuación vamos a ver cómo va a llegar al componente (será un parámetro que vamos a pasarle desde la página) El tag de es para incluir el cuerpo del componente o página que nuestro Marco va a envolver.

@IncludeStylesheet("context:/estilos.css")
public class Marco {
//propiedad title que es una cadena y además indicamos que es un parámetro obligatorio.
  @Property
  @Parameter(required=true, defaultPrefix=BindingConstants.LITERAL)
  private String title; //El titulo de la pagina
}

-defaultPrefi :es realmente un binding entre el parámetro y su valor

-binding: Un enlace es una conexión entre un componente y su contenedor (otro componente), que permite que el componente incrustado tenga acceso a los recursos definidos por el contenedor

#Prefijos

prop: Para ligar el valor del parámetro con una propiedad del componente o página donde reside.

asset: Para ligar el valor del parámetro con un activo del componente o página donde reside. Un activo puede ser por ejemplo una imagen.

message: Para ligar el valor del parámetro con un mensaje del componente o página donde reside. Cada página o componente puede tener una serie de mensajes que son muy útiles porque es la manera más sencilla de internacionalizar una página.

<!-- Nombre -->
<html t:type="marco" title="Captura de nombre"
  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
  xmlns:p="tapestry:parameter">
<t:form t:id="saluda">
  <t:textfield t:id="nombre" t:value="nombre" size="30" maxlength="80" />
  <t:submit t:id="saludar" t:value="Saludar" />
</t:form>
</html>

t:type="marco" para indicar que realmente el tag de HTML se va a convertir en el componente Marco. Al momento de hacer el render de la página, Tapestry va a hacer primero el render del componente Marco hasta donde llega al tag de , en ese momento va a sustituir dicho tag con el resto de la página Nombre, hasta llegar al y eso lo va a sustituir con el resto de Marco (lo que sigue de en Marco.tml).

title="Captura de Nombre" que es el parámetro "title" que definimos en el componente Marco. Así de fácil es pasarle un parámetro; no le ponemos prefijo porque ya sabemos que es literal porque así está definido el componente. #Inyección de objetos en páginas y componentes,