Um aplicativo Web ´e formado por um conjunto de p´aginas HTML constru´ıdas com o uso de componentes. O componente ´e respons´avel por gerar dinamicamente conte´udo de partes da p´agina Web, com o uso de classes Java. O Tapestry oferece por volta de 50 componentes, que s˜ao suficientes para atender `as necessidades de um desenvolvedor Web (Smart, 2006). ´E poss´ıvel, ainda, desenvolver novos componentes Tapestry para serem utilizados nas aplica¸c˜oes Web.
Os componentes Tapestry s˜ao identificado no c´odigo HTML da p´agina modelo, pela palavra jwcid e podem ser do tipo impl´ıcitos ou declarados:
– Componentes impl´ıcitos: s˜ao aqueles que descrevem o seu tipo e seus parˆametros diretamente no c´odigo HTML. A sintaxe b´asica deste tipo de componente est´a ilustrada na Figura H.1. O componente ´e inserido em uma marca HTML (1) e ´e composto pela palavra jwcid (2), seguido do sinal de igual, do sinal de aspas, do nome de seu identificador (3),
do s´ımbolo @ (4), do seu tipo (5), do sinal de aspas e de um ou mais parˆametros. Estes parˆametros vˆem separados por espa¸cos em branco e s˜ao formados pelo nome do parˆametro (6), seguido pelo sinal de igual (7), pelo sinal de aspas, pelo valor associado ao parˆametro (8) e outro s´ımbolo de aspas. O sinal de maior (9) fecha a marca HTML. O nome do identificador n˜ao ´e obrigat´orio e, quando ele n˜ao ´e fornecido, o Tapestry cria um nome para ele automaticamente.
Figura H.1: Sintaxe de um componente impl´ıcito do Tapestry.
No exemplo seguinte, ´e definido um componente (sem identifica¸c˜ao) do tipo de inser¸c˜ao (Insert) cujo parˆametro “value” ter´a como valor o conte´udo recuperado do atributo “price” da classe Java “feature.Destination”. Este valor substituir´a o n´umero 199 pois o mesmo est´a envolvido pela marca <span>. O prefixo ognl indica que o que vem ap´os os dois pontos ´e uma express˜ao OGNL (Object Graph Navigation Language), a qual informa ao Tapestry que o valor “featureDestination.price” ´e uma express˜ao a ser avaliada e n˜ao uma “String” literal.
<span jwcid="@Insert" value="ognl:featureDestination.price">199</span>
– Componentes declarados: s˜ao aqueles que tˆem o seu tipo e parˆametros definidos externamente, em um arquivo de especifica¸c˜oes. A sintaxe deste tipo de componente est´a mostrada na Figura H.2. O componente tamb´em ´e inserido em uma marca HTML (1) e ´e formado apenas pela palavra jwcid(2), seguido do sinal de igual, do sinal de aspas, do nome de seu identificador (3), do sinal de aspas e pelo sinal de maior (4) que fecha a marca HTML.
Figura H.2: Sintaxe de um componente declarado do Tapestry.
O arquivo de especifica¸c˜oes de componentes Tapestry tem o mesmo nome do modelo HTML seguido pela extens˜ao “.page”. Ele ´e um arquivo XML com a seguinte forma:
<?xml version="1.0"?>
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd"> <page-specification class="contexto.Home">
</page-specification>
As linhas iniciais do arquivo XML formam o pr´ologo e identificam o documento como sendo um modelo de documento p´ublico Tapestry. O bloco seguinte, formado pelo elemento raiz <page-specification> ´e onde devem ser inseridas as especifica¸c˜oes dos componentes declarados. O atributo “class” identifica a classe Java principal. Seu valor deve ser o contexto (caminho de diret´orios onde est˜ao armazenadas as classes Java da aplica¸c˜ao) seguido por um ponto e pelo nome da classe, que tem o mesmo nome do arquivo HTML e do arquivo de especifica¸c˜oes (neste exemplo a classe usada foi Home.class).
A lista a seguir mostra alguns exemplos de componentes Tapestry (Tapestry, 2006):
– Insert: usado para inser¸c˜ao de texto no c´odigo HTML final.
– Image: usado para exibir uma imagem. Por exemplo, o componente Image definido no c´odigo HTML a seguir:
Sua declara¸c˜ao no arquivo “.page” pode ser feita atrav´es do elemento “<asset>”. Este elemento ´e um tipo especial de componente para referenciar um arquivo externo.
<asset name="imageAsset" path="/images/poweredby.png"/>
– Form: usado para obter dados do usu´ario. ´E associado `a marca HTML “<form>” que ´e um bloco composto de outros elementos usados em formul´arios HTML. O exemplo abaixo mostra um formul´ario HTML associado ao componente do tipo “Form” do Tapestry :
<form jwcid="stockQuoteForm">
<input type="text" jwcid="stockId"/> <input type="submit" value="OK"/> </form>
Este componente pode ser declarado no arquivo de especifica¸c˜oes da seguinte maneira:
<component id="stockQuoteForm" type="Form">
<binding name="listener" value="listener:onOk"/> </component>
O valor do parˆametro “listener ” referencia o nome do m´etodo que ´e acionado quando o usu´ario “clica” no bot˜ao de envio de dados na p´agina (normalmente ´e um bot˜ao com a indica¸c˜ao OK ou ENVIAR).
– TextField: associado ao elemento de formul´ario HTML chamado “<input>” , que ´e um campo para digita¸c˜ao de dados. No exemplo HTML mostrado no item anterior foi definido o componente de nome “stockId ” que pode ser declarado no arquivo de especifica¸c˜oes da seguinte maneira:
<component id="stockId" type="TextField">
<binding name="value" value="ognl:stockId"/> </component>
– PropertySelection: associado ao elemento de formul´ario HTML “<select>”, que apre- senta uma lista de op¸c˜oes ao usu´ario. Em um c´odigo HTML ele pode ser definido do seguinte modo:
<select jwcid="stockId">
<option value="0">IBM</option> <option value="1">RHAT</option> </select>
Os elementos “<option>” definem as op¸c˜oes a serem apresentadas. O componente “stockId ” pode ser declarado no arquivo de especifica¸c˜oes da seguinte maneira:
<component id="stockId" type="PropertySelection"> <binding name="model" value="availStockIds"/> <binding name="value" value="stockId"/>
</component>
O parˆametro “model ” armazena as op¸c˜oes a serem exibidas pelas marcas “<option>” no HTML. Estas op¸c˜oes ser˜ao obtidas pelo m´etodo getAvailStockIds() da classe Java em quest˜ao. O parˆametro “value” indica onde ser´a armazenada a op¸c˜ao escolhida pelo usu´ario, que no exemplo ´e o atributo “stockId ” da classe Home.java.
– DatePicker: permite que o usu´ario forne¸ca uma data “clicando” diretamente em um calend´ario gr´afico na p´agina. O componente “quoteDate” definido no trecho de c´odigo HTML abaixo, ilustra este tipo de componente:
<span jwcid="quoteDate">May 3, 2005</span>
Este componente pode ser declarado no arquivo de especifica¸c˜oes da seguinte maneira:
<component id="quoteDate" type="DatePicker"> <binding name="value" value="quoteDate"/> </component>
Outros tipos de componentes, assim como seus tipos de parˆametros v´alidos, podem ser encontrados no “site ” oficial do Tapestry (Tapestry, 2006).