Commit d7c4460b6fe305d1fe4a5021093b9319fd7b57a7

Authored by Ednara Oliveira
2 parents 6fe93186 8af50b57
Exists in master

Merge branch 'master' of git@github.com:demoiselle/framework.git

documentation/quickstart/pt-BR/authorgroup.xml
1 <?xml version='1.0' encoding="utf-8"?> 1 <?xml version='1.0' encoding="utf-8"?>
2 <!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 2 <!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 -<authorgroup>  
5 - <author>  
6 - <firstname>Emerson</firstname>  
7 - <surname>Saito</surname>  
8 - </author>  
9 - <author>  
10 - <firstname>Marlon</firstname>  
11 - <surname>Carvalho</surname>  
12 - </author>  
13 - <author>  
14 - <firstname>Rodrigo</firstname>  
15 - <surname>Hjort</surname>  
16 - </author>  
17 - <author>  
18 - <firstname>Serge</firstname>  
19 - <surname>Rehem</surname>  
20 - </author>  
21 -</authorgroup>  
22 \ No newline at end of file 4 \ No newline at end of file
  5 + <authorgroup>
  6 + <author>
  7 + <firstname>Emerson</firstname>
  8 + <surname>Saito</surname>
  9 + </author>
  10 + <author>
  11 + <firstname>Luciano</firstname>
  12 + <surname>Borges</surname>
  13 + </author>
  14 + <author>
  15 + <firstname>Marlon</firstname>
  16 + <surname>Carvalho</surname>
  17 + </author>
  18 + <author>
  19 + <firstname>Rodrigo</firstname>
  20 + <surname>Hjort</surname>
  21 + </author>
  22 + <author>
  23 + <firstname>Serge</firstname>
  24 + <surname>Rehem</surname>
  25 + </author>
  26 + </authorgroup>
23 \ No newline at end of file 27 \ No newline at end of file
documentation/quickstart/pt-BR/bookinfo.xml
1 <?xml version='1.0' encoding="utf-8"?> 1 <?xml version='1.0' encoding="utf-8"?>
2 <!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 2 <!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 -<bookinfo>  
5 -  
6 - <title>Framework Demoiselle 2.0</title>  
7 - <subtitle>QuickStart</subtitle>  
8 -  
9 - <abstract>Demoiselle 2.0: Framework de Código Aberto para o Desenvolvimento de Aplicações Java EE 6</abstract>  
10 - <titleabbrev>Demoiselle 2.0 - QuickStart</titleabbrev>  
11 -  
12 - <xi:include href="revhistory.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
13 - <xi:include href="authorgroup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
14 -  
15 -</bookinfo>  
16 \ No newline at end of file 4 \ No newline at end of file
  5 + <bookinfo>
  6 + <title>Framework Demoiselle 2.3</title>
  7 + <subtitle>QuickStart</subtitle>
  8 + <xi:include href="authorgroup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  9 + </bookinfo>
documentation/quickstart/pt-BR/criacao.xml
1 <?xml version='1.0' encoding="utf-8"?> 1 <?xml version='1.0' encoding="utf-8"?>
2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 -<chapter id="criacao">  
5 4
  5 +<chapter id="criacao">
6 <title>Criação da aplicação</title> 6 <title>Criação da aplicação</title>
7 -  
8 <section> 7 <section>
9 <title>Nossa primeira aplicação</title> 8 <title>Nossa primeira aplicação</title>
10 <para> 9 <para>
11 - Para iniciar o uso do <emphasis>Demoiselle Framework 2.X</emphasis>, criaremos uma aplicação 10 + Para iniciar o uso do <emphasis>Demoiselle Framework 2.3</emphasis>, criaremos uma aplicação
12 Java do tipo Web utilizando o <ulink url="http://maven.apache.org/"><citetitle>Apache Maven</citetitle></ulink>, 11 Java do tipo Web utilizando o <ulink url="http://maven.apache.org/"><citetitle>Apache Maven</citetitle></ulink>,
13 através do plugin para IDE Eclipse (M2Eclipse) para gerenciar todo o clico de vida do Projeto, 12 através do plugin para IDE Eclipse (M2Eclipse) para gerenciar todo o clico de vida do Projeto,
14 desde a criação até o <emphasis>deploy</emphasis>. 13 desde a criação até o <emphasis>deploy</emphasis>.
@@ -23,91 +22,57 @@ @@ -23,91 +22,57 @@
23 22
24 <section> 23 <section>
25 <title>Construindo o projeto usando um arquétipo Maven</title> 24 <title>Construindo o projeto usando um arquétipo Maven</title>
26 - <important>  
27 - <para>  
28 - O procedimento a seguir pode ser comumente executado de forma visual com o auxílio de um  
29 - assistente (i.e., wizard) de dentro da IDE Eclipse, como será demonstrado logo após o modo linha de comando.  
30 - </para>  
31 - </important>  
32 - <section>  
33 - <title>Linha de comando</title>  
34 - <para>  
35 - Para criar a aplicação usando o arquétipo em linha de comando, abra um terminal e execute o comando <command>mvn</command>  
36 - do Maven com os argumentos ilustrados a seguir:  
37 - </para>  
38 - <programlisting role="BASH"><![CDATA[mvn archetype:generate \  
39 - -DarchetypeGroupId=br.gov.frameworkdemoiselle.archetypes \  
40 - -DarchetypeArtifactId=demoiselle-jsf-jpa \  
41 - -DarchetypeVersion=2.2.0 \  
42 - -DarchetypeRepository=http://demoiselle.sourceforge.net/repository/release/ \  
43 - -DgroupId=br.gov.frameworkdemoiselle.sample \  
44 - -DartifactId=bookmark \  
45 - -Dversion=1.0.0-SNAPSHOT \  
46 - -DinteractiveMode=false]]></programlisting>  
47 -<!-- para testar locamente:  
48 -mvn archetype:generate \  
49 - -DarchetypeGroupId=br.gov.frameworkdemoiselle.archetypes \  
50 - -DarchetypeArtifactId=demoiselle-jsf-jpa \  
51 - -DarchetypeVersion=2.0.0-RC1-SNAPSHOT \  
52 - -DgroupId=br.gov.frameworkdemoiselle.sample \  
53 - -DartifactId=bookmark \  
54 - -Dversion=1.0.0-SNAPSHOT \  
55 - -DinteractiveMode=false  
56 - -->  
57 - </section>  
58 - <section>  
59 - <title>Modo assistido com Eclipse</title> 25 + <para>
  26 + Para criar esse projeto utilizando a IDE Eclipse, acesse o menu <guimenu>File</guimenu>,
  27 + <guimenu>New</guimenu>, <guimenu>Other...</guimenu> digite e selecione <guimenu>Maven Project</guimenu>:
  28 + conforme mostrado na figura abaixo:
  29 + <mediaobject>
  30 + <imageobject role="fo">
  31 + <imagedata fileref="images/newwiz.png" align="center" scalefit="1" width="75%"/>
  32 + </imageobject>
  33 + <imageobject role="html">
  34 + <imagedata fileref="images/newwiz.png" align="center"/>
  35 + </imageobject>
  36 + </mediaobject>
  37 + </para>
  38 + <para>
  39 + Na tela seguinte, recomenda-se manter os valores "default":
  40 + <mediaobject>
  41 + <imageobject role="fo">
  42 + <imagedata fileref="images/new-maven-project01.png" align="center" scalefit="1" width="75%"/>
  43 + </imageobject>
  44 + <imageobject role="html">
  45 + <imagedata fileref="images/new-maven-project01.png" align="center"/>
  46 + </imageobject>
  47 + </mediaobject>
  48 + </para>
  49 + <para>
  50 + Na tela abaixo, no combo-box chamado <literal>Catalog</literal>, selecione o item com o nome <quote>Demoiselle</quote> e
  51 + no campo <literal>Filter</literal> digite <quote>JSF</quote> e em seguida selecione o item <quote>demoiselle-jsf-jpa</quote>:
  52 + <mediaobject>
  53 + <imageobject role="fo">
  54 + <imagedata fileref="images/new-maven-project02.png" align="center" scalefit="1" width="75%"/>
  55 + </imageobject>
  56 + <imageobject role="html">
  57 + <imagedata fileref="images/new-maven-project02.png" align="center"/>
  58 + </imageobject>
  59 + </mediaobject>
  60 + </para>
  61 + <caution>
60 <para> 62 <para>
61 - Para criar esse projeto utilizando a IDE Eclipse, acesse o menu <guimenu>File</guimenu>,  
62 - <guimenu>New</guimenu>, <guimenu>Other...</guimenu> digite e selecione <guimenu>Maven Project</guimenu>:  
63 - conforme mostrado na figura abaixo:  
64 - <mediaobject>  
65 - <imageobject role="fo">  
66 - <imagedata fileref="images/newwiz.png" align="center" scalefit="1" width="75%"/>  
67 - </imageobject>  
68 - <imageobject role="html">  
69 - <imagedata fileref="images/newwiz.png" align="center"/>  
70 - </imageobject>  
71 - </mediaobject>  
72 - </para>  
73 - <para>  
74 - Na tela seguinte, recomenda-se manter os valores "default":  
75 - <mediaobject>  
76 - <imageobject role="fo">  
77 - <imagedata fileref="images/new-maven-project01.png" align="center" scalefit="1" width="75%"/>  
78 - </imageobject>  
79 - <imageobject role="html">  
80 - <imagedata fileref="images/new-maven-project01.png" align="center"/>  
81 - </imageobject>  
82 - </mediaobject> 63 + Se as opções anteriores não aparecem, é porque será necessário incluir o catálogo remoto de arquétipos Maven do Demoiselle.
  64 + Caso contrário pule o subitem <emphasis>Incluindo catálogo remoto</emphasis> e siga as demais instruções.
83 </para> 65 </para>
84 - <para>  
85 - Na tela abaixo, no combo-box chamado <literal>Catalog</literal>, selecione o item com o nome <quote>Demoiselle</quote> e  
86 - no campo <literal>Filter</literal> digite <quote>JSF</quote> e em seguida selecione o item <quote>demoiselle-jsf-jpa</quote>:  
87 - <mediaobject>  
88 - <imageobject role="fo">  
89 - <imagedata fileref="images/new-maven-project02.png" align="center" scalefit="1" width="75%"/>  
90 - </imageobject>  
91 - <imageobject role="html">  
92 - <imagedata fileref="images/new-maven-project02.png" align="center"/>  
93 - </imageobject>  
94 - </mediaobject> 66 + </caution>
  67 + <caution>
  68 + <para>
  69 + A versão do arquétipo irá variar conforme surjam novas versões do Demoiselle. A imagem deste guia apresenta a versão 2.3, contudo,
  70 + fique sempre atento para as novas versões do Demoiselle em nosso site e sempre utilize a versão do arquétipo mais recente.
95 </para> 71 </para>
96 - <caution>  
97 - <para>  
98 - Se as opções anteriores não aparecem, é porque será necessário incluir o catálogo remoto de arquétipos Maven do Demoiselle.  
99 - Caso contrário pule o subitem <emphasis>Incluindo catálogo remoto</emphasis> e siga as demais instruções.  
100 - </para>  
101 - </caution>  
102 - <caution>  
103 - <para>  
104 - A versão do arquétipo irá variar conforme surjam novas versões do Demoiselle. A imagem deste guia apresenta a versão 2.0.0, contudo,  
105 - fique sempre atento para as novas versões do Demoiselle em nosso site e sempre utilize a versão do arquétipo mais recente.  
106 - </para>  
107 - </caution>  
108 - <section>  
109 - <title>Incluindo catálogo remoto</title>  
110 - <para> 72 + </caution>
  73 + <section>
  74 + <title>Incluindo catálogo remoto</title>
  75 + <para>
111 Ainda na tela criação do novo projeto, clique no botão <guibutton>Configure</guibutton> à direita do combo-box 76 Ainda na tela criação do novo projeto, clique no botão <guibutton>Configure</guibutton> à direita do combo-box
112 <literal>Catalog</literal>, para que apareça a tela de configuração de arquétipos Maven no Eclipse. 77 <literal>Catalog</literal>, para que apareça a tela de configuração de arquétipos Maven no Eclipse.
113 </para> 78 </para>
@@ -132,8 +97,8 @@ mvn archetype:generate \ @@ -132,8 +97,8 @@ mvn archetype:generate \
132 </mediaobject> 97 </mediaobject>
133 <para> 98 <para>
134 Na campo <literal>Catalog File</literal> coloque este conteúdo: 99 Na campo <literal>Catalog File</literal> coloque este conteúdo:
135 - <literal>http://demoiselle.sourceforge.net/repository/archetype-catalog.xml</literal>.  
136 - No campo <literal>Description</literal> informe: <quote>Demoiselle</quote>. Em seguida, clique no botão 100 + <literal>https://oss.sonatype.org/content/repositories/releases</literal>.
  101 + No campo <literal>Description</literal> informe: <quote>Nexus</quote>. Em seguida, clique no botão
137 <guibutton>Verify...</guibutton> para certificar-se que o conteúdo está correto. 102 <guibutton>Verify...</guibutton> para certificar-se que o conteúdo está correto.
138 Retorne então ao item anterior e siga as instruções. 103 Retorne então ao item anterior e siga as instruções.
139 </para> 104 </para>
@@ -154,87 +119,137 @@ mvn archetype:generate \ @@ -154,87 +119,137 @@ mvn archetype:generate \
154 Ao término do processo será criado o projeto <literal>bookmark</literal> gerenciado 119 Ao término do processo será criado o projeto <literal>bookmark</literal> gerenciado
155 pelo Maven e com a seguinte estrutura de diretórios: 120 pelo Maven e com a seguinte estrutura de diretórios:
156 </para> 121 </para>
157 - <programlisting><![CDATA[bookmark/ 122 + <programlisting>
  123 +<![CDATA[bookmark/
158 |-- pom.xml 124 |-- pom.xml
159 -`-- src  
160 - |-- main  
161 - | |-- java  
162 - | | `-- br  
163 - | | `-- gov  
164 - | | `-- frameworkdemoiselle  
165 - | | `-- sample  
166 - | | |-- business  
167 - | | |-- constant  
168 - | | |-- domain  
169 - | | |-- exception  
170 - | | |-- message  
171 - | | |-- persistence  
172 - | | |-- util  
173 - | | `-- view  
174 - | |-- resources  
175 - | | |-- demoiselle.properties  
176 - | | |-- log4j.properties  
177 - | | |-- messages.properties  
178 - | | |-- META-INF  
179 - | | | |-- beans.xml  
180 - | | | `-- persistence.xml  
181 - | | `-- ValidationMessages.properties  
182 - | `-- webapp  
183 - | |-- home.xhtml  
184 - | |-- images  
185 - | | `-- logo.png  
186 - | |-- index.html  
187 - | |-- menu.xhtml  
188 - | |-- template  
189 - | | `-- main.xhtml  
190 - | `-- WEB-INF  
191 - | |-- faces-config.xml  
192 - | `-- web.xml  
193 - `-- test  
194 - |-- java  
195 - | `-- br  
196 - | `-- gov  
197 - | `-- frameworkdemoiselle  
198 - | `-- sample  
199 - `-- resources]]></programlisting>  
200 - </section> 125 +|-- src
  126 +| |-- main
  127 +| | |-- java
  128 +| | | |-- br
  129 +| | | |-- gov
  130 +| | | |-- frameworkdemoiselle
  131 +| | | |-- sample
  132 +| | | |-- bookmark
  133 +| | | |-- business
  134 +| | | | |-- BookmarkBC.java
  135 +| | | |-- constant
  136 +| | | | |-- readme.txt
  137 +| | | |-- domain
  138 +| | | | |-- Bookmark.java
  139 +| | | |-- exception
  140 +| | | | |-- readme.txt
  141 +| | | |-- message
  142 +| | | | |-- readme.txt
  143 +| | | |-- persistence
  144 +| | | | |-- BookmarkDAO.java
  145 +| | | |-- util
  146 +| | | | |-- readme.txt
  147 +| | | |-- view
  148 +| | | |-- BookmarkEditMB.java
  149 +| | | |-- BookmarkListMB.java
  150 +| | |-- resources
  151 +| | | |-- demoiselle.properties
  152 +| | | |-- log4j.properties
  153 +| | | |-- messages.properties
  154 +| | | |-- META-INF
  155 +| | | | |-- beans.xml
  156 +| | | | |-- persistence.xml
  157 +| | | |-- ValidationMessages.properties
  158 +| | |-- webapp
  159 +| | |-- bookmark_edit.xhtml
  160 +| | |-- bookmark_list.xhtml
  161 +| | |-- images
  162 +| | | |-- logo.png
  163 +| | |-- index.html
  164 +| | |-- index.xhtml
  165 +| | |-- menu.xhtml
  166 +| | |-- template
  167 +| | | |-- main.xhtml
  168 +| | |-- WEB-INF
  169 +| | |-- beans.xml
  170 +| | |-- faces-config.xml
  171 +| | |-- lib
  172 +| | |-- web.xml
  173 +| |-- test
  174 +| |-- java
  175 +| | |-- br
  176 +| | |-- gov
  177 +| | |-- frameworkdemoiselle
  178 +| | |-- sample
  179 +| | |-- bookmark
  180 +| | |-- business
  181 +| | |-- BookmarkBCTest.java
  182 +| |-- resources
  183 +| |-- demoiselle.properties
  184 +| |-- META-INF
  185 +| |-- beans.xml
  186 +| |-- persistence.xml]]>
  187 + </programlisting>
  188 +
201 189
202 <section> 190 <section>
203 - <title>Criando a entidade de domínio</title> 191 + <title>Entidade de Domínio</title>
204 <para> 192 <para>
205 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.domain</literal> crie a classe 193 + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.domain</literal> foi criada a classe
206 <literal>Bookmark</literal>, a qual será responsável por representar um objeto de bookmark 194 <literal>Bookmark</literal>, a qual será responsável por representar um objeto de bookmark
207 a ser persistido no banco de dados usando JPA: 195 a ser persistido no banco de dados usando JPA:
208 </para> 196 </para>
209 - <programlisting role="JAVA"><![CDATA[@Entity  
210 -public class Bookmark {  
211 -  
212 - @Id  
213 - @GeneratedValue  
214 - private Long id;  
215 -  
216 - @Column  
217 - private String description;  
218 -  
219 - @Column  
220 - private String link;  
221 -  
222 - public Bookmark() {  
223 - super();  
224 - }  
225 -  
226 - public Bookmark(String description, String link) {  
227 - this.description = description;  
228 - this.link = link;  
229 - }  
230 -  
231 -}]]></programlisting>  
232 - <note>  
233 - <para>  
234 - Lembre-se de criar os respectivos métodos <emphasis>getter</emphasis> e  
235 - <emphasis>setter</emphasis> para as propriedades dessa classe.  
236 - </para>  
237 - </note> 197 + <programlisting role="JAVA">
  198 + <![CDATA[
  199 + @Entity
  200 + public class Bookmark implements Serializable {
  201 +
  202 + private static final long serialVersionUID = 1L;
  203 +
  204 + /*
  205 + * If you are using Glassfish then remove the strategy attribute
  206 + */
  207 + @Id
  208 + @GeneratedValue(strategy = SEQUENCE)
  209 + private Long id;
  210 +
  211 + @Column
  212 + private String description;
  213 +
  214 + @Column
  215 + private String link;
  216 +
  217 + public Bookmark() {
  218 + super();
  219 + }
  220 +
  221 + public Bookmark(String description, String link) {
  222 + this.description = description;
  223 + this.link = link;
  224 + }
  225 +
  226 + public Long getId() {
  227 + return id;
  228 + }
  229 +
  230 + public void setId(Long id) {
  231 + this.id = id;
  232 + }
  233 +
  234 + public String getDescription() {
  235 + return description;
  236 + }
  237 +
  238 + public void setDescription(String description) {
  239 + this.description = description;
  240 + }
  241 +
  242 + public String getLink() {
  243 + return link;
  244 + }
  245 +
  246 + public void setLink(String link) {
  247 + this.link = link;
  248 + }
  249 +
  250 + }
  251 + ]]>
  252 + </programlisting>
238 <para> 253 <para>
239 Os dois construtores da classe <literal>Bookmark</literal> serão utilizados posteriormente na aplicação. 254 Os dois construtores da classe <literal>Bookmark</literal> serão utilizados posteriormente na aplicação.
240 As anotações <literal>@Entity</literal>, <literal>@Id</literal>, <literal>@GeneratedValue</literal> e 255 As anotações <literal>@Entity</literal>, <literal>@Id</literal>, <literal>@GeneratedValue</literal> e
@@ -243,147 +258,182 @@ public class Bookmark { @@ -243,147 +258,182 @@ public class Bookmark {
243 </section> 258 </section>
244 259
245 <section> 260 <section>
246 - <title>Implementando a camada de persistência</title> 261 + <title>Camada de Persistência</title>
247 <para> 262 <para>
248 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.persistence</literal> crie a classe 263 + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.persistence</literal> foi criada a classe
249 <literal>BookmarkDAO</literal>, a qual será responsável por manipular os dados: 264 <literal>BookmarkDAO</literal>, a qual será responsável por manipular os dados:
250 </para> 265 </para>
251 - <programlisting role="JAVA"><![CDATA[@PersistenceController  
252 -public class BookmarkDAO extends JPACrud<Bookmark, Long> {  
253 -  
254 - private static final long serialVersionUID = 1L;  
255 -  
256 -}]]></programlisting>  
257 - <tip> 266 + <programlisting role="JAVA">
  267 + <![CDATA[
  268 + @PersistenceController
  269 + public class BookmarkDAO extends JPACrud<Bookmark, Long> {
  270 +
  271 + private static final long serialVersionUID = 1L;
  272 +
  273 + }
  274 + ]]>
  275 + </programlisting>
  276 + <note>
258 <para> 277 <para>
259 A anotação <literal>@PersistenceController</literal> trata-se de um estereótipo fornecido 278 A anotação <literal>@PersistenceController</literal> trata-se de um estereótipo fornecido
260 - pelo <emphasis>Demoiselle Framework 2.X</emphasis> para indicar que uma classe será tratada 279 + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada
261 como controlador da camada de persistência na aplicação. 280 como controlador da camada de persistência na aplicação.
262 </para> 281 </para>
263 - </tip> 282 + </note>
264 <para> 283 <para>
265 A classe abstrata <literal>JPACrud</literal> faz parte do código de suporte fornecido pelo 284 A classe abstrata <literal>JPACrud</literal> faz parte do código de suporte fornecido pelo
266 - <emphasis>Demoiselle Framework 2.X</emphasis> (especificamente na extensão JPA). Ao utilizá-la, 285 + <emphasis>Demoiselle Framework 2</emphasis> (especificamente na extensão JPA). Ao utilizá-la,
267 o desenvolvedor não precisará implementar métodos de manipulação de uma entidade, tais como busca, 286 o desenvolvedor não precisará implementar métodos de manipulação de uma entidade, tais como busca,
268 listagem, inclusão, alteração e exclusão de registros. Dessa forma, apenas métodos específicos do 287 listagem, inclusão, alteração e exclusão de registros. Dessa forma, apenas métodos específicos do
269 caso de uso necessitam ser criados manualmente. 288 caso de uso necessitam ser criados manualmente.
270 </para> 289 </para>
271 - <note> 290 + <tip>
272 <para> 291 <para>
273 Recomenda-se usar o sufixo <quote>DAO</quote> nessa classe para indicar que se trata de 292 Recomenda-se usar o sufixo <quote>DAO</quote> nessa classe para indicar que se trata de
274 um objeto de acesso a dados (i.e., um <emphasis>DAO - Data Access Object</emphasis>). 293 um objeto de acesso a dados (i.e., um <emphasis>DAO - Data Access Object</emphasis>).
275 </para> 294 </para>
276 - </note>  
277 - <para>  
278 - No diretório <filename>/src/main/resources/META-INF/</filename>, altere o arquivo  
279 - <filename>persistence.xml</filename> com o conteúdo seguinte:  
280 - </para>  
281 - <programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>  
282 - <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  
283 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
284 - xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">  
285 - <persistence-unit name="bookmark-ds">  
286 - <jta-data-source>java:/DefaultDS</jta-data-source>  
287 - <class>br.gov.frameworkdemoiselle.sample.domain.Bookmark</class>  
288 - <properties>  
289 - <property name="hibernate.show_sql" value="true" />  
290 - <property name="hibernate.format_sql" value="false" />  
291 - <property name="hibernate.hbm2ddl.auto" value="update" />  
292 - <property name="hibernate.transaction.factory_class"  
293 - value="org.hibernate.transaction.JTATransactionFactory" />  
294 - <property name="jta.UserTransaction" value="UserTransaction" />  
295 - </properties>  
296 - </persistence-unit>  
297 - </persistence>]]></programlisting>  
298 - <para>  
299 - Este arquivo armazenará as configurações de acesso ao banco de dados via JPA. Neste caso, o gerenciamento das conexões  
300 - ficará a cargo do servidor de aplicações (ex: JBoss AS). Será usada a fonte de dados <literal>java:/DefaultDS</literal>.  
301 - </para> 295 + </tip>
302 <para> 296 <para>
303 - No diretório <filename>/src/main/resources/</filename>, altere o arquivo  
304 - <filename>demoiselle.properties</filename> com o conteúdo seguinte: 297 + No diretório <filename>/src/main/resources/META-INF/</filename> foi criado o arquivo <filename>persistence.xml</filename>
  298 + utilizado para armazenar as configurações de acesso ao banco de dados via JPA (conexões controladas por um <literal>JPA Provider</literal>, ex: Hibernate)
  299 + ou JTA (conexões controladas pelo <literal>Application Server</literal>, ex: JBossAS) e como pode ser observado o <emphasis>Demoiselle Framework 2</emphasis>
  300 + já traz neste arquivo vários exemplos de configurações para os mais distintos <literal>Application Servers</literal>, como:
  301 + JBoss AS7, JBoss AS6, GlassFish 3, Tomcat 6 e Tomcat7.
305 </para> 302 </para>
306 - <programlisting><![CDATA[frameworkdemoiselle.persistence.unit.name=bookmark-ds]]></programlisting>  
307 <para> 303 <para>
308 - No diretório <filename>/src/main/resources/META-INF/</filename>, altere o arquivo  
309 - <filename>beans.xml</filename> com o conteúdo seguinte: 304 + O projeto criado pelo arquétipo <quote>demoiselle-jsf-jpa</quote> já vem configurado para usar conexão JPA com o HSQLDB, conforme código abaixo:
310 </para> 305 </para>
311 - <programlisting role="XML"><![CDATA[<?xml version="1.0"?>  
312 -<beans xmlns="http://java.sun.com/xml/ns/javaee"  
313 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
314 - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
315 - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"> 306 + <programlisting role="XML">
  307 + <![CDATA[
  308 + <?xml version="1.0" encoding="UTF-8"?>
  309 + <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  310 + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
316 311
317 - <alternatives>  
318 - <class>br.gov.frameworkdemoiselle.transaction.JTATransaction</class>  
319 - </alternatives> 312 + <persistence-unit name="bookmark-ds" transaction-type="RESOURCE_LOCAL">
  313 + <non-jta-data-source>java:jboss/datasources/ExampleDS</non-jta-data-source>
  314 +
  315 + <class>br.gov.frameworkdemoiselle.sample.bookmark.domain.Bookmark</class>
320 316
321 -</beans>]]></programlisting> 317 + <properties>
  318 + <property name="hibernate.show_sql" value="true" />
  319 + <property name="hibernate.format_sql" value="false" />
  320 + <property name="hibernate.hbm2ddl.auto" value="create-drop" />
  321 + </properties>
  322 + </persistence-unit>
  323 + </persistence>
  324 + ]]>
  325 + </programlisting>
322 </section> 326 </section>
323 327
324 <section> 328 <section>
325 - <title>Implementando a camada de negócio</title> 329 + <title>Camada de Negócio</title>
326 <para> 330 <para>
327 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.business</literal> crie a classe  
328 - <literal>BookmarkBC</literal>, a qual será responsável por gerenciar as regras de negócio  
329 - referentes aos bookmarks: 331 + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.business</literal> foi criada a classe
  332 + <literal>BookmarkBC</literal>, a qual será responsável por gerenciar as regras de negócio referentes aos bookmarks:
330 </para> 333 </para>
331 - <programlisting role="JAVA"><![CDATA[@BusinessController  
332 -public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> {  
333 -  
334 - private static final long serialVersionUID = 1L;  
335 -  
336 - @Startup  
337 - @Transactional  
338 - public void startup() {  
339 - if (findAll().isEmpty()) {  
340 - insert(new Bookmark("Demoiselle Portal", "http://www.frameworkdemoiselle.gov.br"));  
341 - insert(new Bookmark("Demoiselle SourceForge", "http://sf.net/projects/demoiselle"));  
342 - insert(new Bookmark("Twitter", "http://twitter.frameworkdemoiselle.gov.br"));  
343 - insert(new Bookmark("Blog", "http://blog.frameworkdemoiselle.gov.br"));  
344 - insert(new Bookmark("Wiki", "http://wiki.frameworkdemoiselle.gov.br"));  
345 - insert(new Bookmark("Bug Tracking", "http://tracker.frameworkdemoiselle.gov.br"));  
346 - insert(new Bookmark("Forum", "http://forum.frameworkdemoiselle.gov.br"));  
347 - insert(new Bookmark("SVN", "http://svn.frameworkdemoiselle.gov.br"));  
348 - insert(new Bookmark("Maven", "http://repository.frameworkdemoiselle.gov.br"));  
349 - insert(new Bookmark("Downloads", "http://download.frameworkdemoiselle.gov.br"));  
350 - }  
351 - }  
352 -  
353 -}]]></programlisting> 334 + <programlisting role="JAVA">
  335 + <![CDATA[
  336 + @BusinessController
  337 + public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> {
  338 +
  339 + private static final long serialVersionUID = 1L;
  340 +
  341 + @Startup
  342 + @Transactional
  343 + public void load() {
  344 + if (findAll().isEmpty()) {
  345 + insert(new Bookmark("Demoiselle Portal", "http://www.frameworkdemoiselle.gov.br"));
  346 + insert(new Bookmark("Demoiselle SourceForge", "http://sf.net/projects/demoiselle"));
  347 + insert(new Bookmark("Twitter", "http://twitter.frameworkdemoiselle.gov.br"));
  348 + insert(new Bookmark("Blog", "http://blog.frameworkdemoiselle.gov.br"));
  349 + insert(new Bookmark("Wiki", "http://wiki.frameworkdemoiselle.gov.br"));
  350 + insert(new Bookmark("Bug Tracking", "http://tracker.frameworkdemoiselle.gov.br"));
  351 + insert(new Bookmark("Forum", "http://forum.frameworkdemoiselle.gov.br"));
  352 + insert(new Bookmark("SVN", "http://svn.frameworkdemoiselle.gov.br"));
  353 + insert(new Bookmark("Maven", "http://repository.frameworkdemoiselle.gov.br"));
  354 + insert(new Bookmark("Downloads", "http://download.frameworkdemoiselle.gov.br"));
  355 + }
  356 + }
  357 +
  358 + }
  359 + ]]>
  360 + </programlisting>
354 <para> 361 <para>
355 O método <function>startup()</function> nessa classe será invocado automaticamente durante a 362 O método <function>startup()</function> nessa classe será invocado automaticamente durante a
356 inicialização da aplicação e fará com que a tabela seja populada com dados iniciais de bookmarks. 363 inicialização da aplicação e fará com que a tabela seja populada com dados iniciais de bookmarks.
357 </para> 364 </para>
358 - <tip> 365 + <note>
359 <para> 366 <para>
360 A anotação <literal>@BusinessController</literal> trata-se de um estereótipo fornecido 367 A anotação <literal>@BusinessController</literal> trata-se de um estereótipo fornecido
361 - pelo <emphasis>Demoiselle Framework 2.X</emphasis> para indicar que uma classe será tratada 368 + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada
362 como controlador da camada de negócio na aplicação. 369 como controlador da camada de negócio na aplicação.
363 </para> 370 </para>
364 - </tip> 371 + </note>
365 <para> 372 <para>
366 A classe <literal>DelegateCrud</literal> faz parte do código de suporte fornecido pelo 373 A classe <literal>DelegateCrud</literal> faz parte do código de suporte fornecido pelo
367 - <emphasis>Demoiselle Framework 2.0</emphasis>. Ao utilizá-la, o desenvolvedor não precisará 374 + <emphasis>Demoiselle Framework 2</emphasis>. Ao utilizá-la, o desenvolvedor não precisará
368 implementar métodos de negócio triviais de uma entidade e tampouco programar a injeção de dependência 375 implementar métodos de negócio triviais de uma entidade e tampouco programar a injeção de dependência
369 entre as camadas de negócio e persistência. Tal injeção será realizada de forma implícita. 376 entre as camadas de negócio e persistência. Tal injeção será realizada de forma implícita.
370 </para> 377 </para>
371 - <note> 378 + <tip>
372 <para> 379 <para>
373 Recomenda-se usar o sufixo <quote>BC</quote> nessa classe para indicar que se trata de 380 Recomenda-se usar o sufixo <quote>BC</quote> nessa classe para indicar que se trata de
374 um controlador de negócio (i.e., um <emphasis>BC - Business Controller</emphasis>). 381 um controlador de negócio (i.e., um <emphasis>BC - Business Controller</emphasis>).
375 </para> 382 </para>
376 - </note> 383 + </tip>
377 </section> 384 </section>
378 385
379 <section> 386 <section>
380 - <title>Implementando a camada de apresentação</title> 387 + <title>Camada de Apresentação</title>
381 <para> 388 <para>
382 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> crie a classe  
383 - <literal>BookmarkListMB</literal>, a qual será responsável por exibir as informações sobre  
384 - os bookmarks para o usuário: 389 + Dentro do pacote <literal>package br.gov.frameworkdemoiselle.sample.bookmark.view</literal> foram criadas as
  390 + classes <literal>BookmarkEditMB</literal> e <literal>BookmarkListMB</literal>, onde a primeira é responsável
  391 + por controlar as modificações sobre os bookmarks efetuadas pelo usuário e a segunda é responsável por
  392 + exibir as informações sobre os bookmarks.
385 </para> 393 </para>
386 - <programlisting role="JAVA"><![CDATA[@ViewController 394 +
  395 + <programlisting role="JAVA">
  396 +<![CDATA[@ViewController
  397 +@PreviousView("/bookmark_list.xhtml")
  398 +public class BookmarkEditMB extends AbstractEditPageBean<Bookmark, Long> {
  399 +
  400 + private static final long serialVersionUID = 1L;
  401 +
  402 + @Inject
  403 + private BookmarkBC bookmarkBC;
  404 +
  405 + @Override
  406 + @Transactional
  407 + public String delete() {
  408 + this.bookmarkBC.delete(getId());
  409 + return getPreviousView();
  410 + }
  411 +
  412 + @Override
  413 + @Transactional
  414 + public String insert() {
  415 + this.bookmarkBC.insert(getBean());
  416 + return getPreviousView();
  417 + }
  418 +
  419 + @Override
  420 + @Transactional
  421 + public String update() {
  422 + this.bookmarkBC.update(getBean());
  423 + return getPreviousView();
  424 + }
  425 +
  426 + @Override
  427 + protected void handleLoad() {
  428 + setBean(this.bookmarkBC.load(getId()));
  429 + }
  430 +
  431 +}]]>
  432 + </programlisting>
  433 + <programlisting role="JAVA">
  434 +<![CDATA[@ViewController
  435 +@NextView("/bookmark_edit.xhtml")
  436 +@PreviousView("/bookmark_list.xhtml")
387 public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { 437 public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> {
388 438
389 private static final long serialVersionUID = 1L; 439 private static final long serialVersionUID = 1L;
@@ -393,141 +443,106 @@ public class BookmarkListMB extends AbstractListPageBean&lt;Bookmark, Long&gt; { @@ -393,141 +443,106 @@ public class BookmarkListMB extends AbstractListPageBean&lt;Bookmark, Long&gt; {
393 443
394 @Override 444 @Override
395 protected List<Bookmark> handleResultList() { 445 protected List<Bookmark> handleResultList() {
396 - return bc.findAll(); 446 + return this.bc.findAll();
397 } 447 }
398 -  
399 -}]]></programlisting>  
400 - <tip>  
401 - <para>  
402 - A anotação <literal>@ViewController</literal> trata-se de um estereótipo fornecido  
403 - pelo <emphasis>Demoiselle Framework</emphasis> para indicar que uma classe será tratada  
404 - como controlador da camada de apresentação (i.e., visão) na aplicação.  
405 - </para>  
406 - </tip> 448 +
  449 + @Transactional
  450 + public String deleteSelection() {
  451 + boolean delete;
  452 + for (Iterator<Long> iter = getSelection().keySet().iterator(); iter.hasNext();) {
  453 + Long id = iter.next();
  454 + delete = getSelection().get(id);
  455 +
  456 + if (delete) {
  457 + bc.delete(id);
  458 + iter.remove();
  459 + }
  460 + }
  461 + return getPreviousView();
  462 + }
  463 +
  464 +}]]>
  465 + </programlisting>
  466 +
407 <para> 467 <para>
408 - A classe <literal>AbstractListPageBean</literal> faz parte do código de suporte fornecido pelo  
409 - <emphasis>Demoiselle Framework</emphasis> (especificamente na extensão JSF). Ao utilizá-la,  
410 - o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de  
411 - cadastro (i.e., do tipo <emphasis>CRUD</emphasis>). 468 + A anotação <literal>@ViewController</literal> trata-se de um estereótipo fornecido
  469 + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada
  470 + como controlador da camada de apresentação (i.e., visão) na aplicação.
  471 + </para>
  472 + <para>
  473 + A anotação <literal>@NextView</literal> serve para definir a próxima
  474 + visão a ser direcionado o fluxo de navegação JSF. De forma semelhante,
  475 + a anotação <literal>@PreviousView</literal> define a visão anterior
  476 + de um fluxo.
412 </para> 477 </para>
413 <para> 478 <para>
414 A anotação <literal>@Inject</literal> é fornecida pela especificação CDI. Ela realiza a injeção 479 A anotação <literal>@Inject</literal> é fornecida pela especificação CDI. Ela realiza a injeção
415 de dependência da camada de negócio dentro do artefato da camada de apresentação. 480 de dependência da camada de negócio dentro do artefato da camada de apresentação.
  481 + </para>
  482 + <para>
  483 + A anotação <literal>@Transactional</literal> trata-se de uma anotação fornecida pelo
  484 + <emphasis>Demoiselle Framework 2</emphasis> para indicar que o método em questão
  485 + será incluído na sessão transacional. Caso essa anotação esteja vinculada na classe,
  486 + todos os seus métodos serão considerados transacionais.
416 </para> 487 </para>
417 - <note> 488 + <para>
  489 + As classes <literal>AbstractEditPageBean</literal> e <literal>AbstractListPageBean</literal> fazem parte
  490 + do código de suporte fornecido pelo <emphasis>Demoiselle Framework 2</emphasis> (especificamente na extensão JSF).
  491 + Ao utilizá-las, o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de
  492 + cadastro (i.e., do tipo <emphasis>CRUD</emphasis>).
  493 + </para>
  494 + <tip>
418 <para> 495 <para>
419 Recomenda-se usar o sufixo <quote>MB</quote> nessa classe para indicar que se trata de 496 Recomenda-se usar o sufixo <quote>MB</quote> nessa classe para indicar que se trata de
420 um bean gerenciado do JSF (i.e., um <emphasis>MB - Managed Bean</emphasis>). 497 um bean gerenciado do JSF (i.e., um <emphasis>MB - Managed Bean</emphasis>).
421 </para> 498 </para>
422 - </note> 499 + </tip>
423 <para> 500 <para>
424 - No diretório <filename>/src/main/webapp/</filename>, crie o arquivo  
425 - <filename>bookmark_list.xhtml</filename> com o conteúdo seguinte: 501 + No diretório <filename>/src/main/webapp/</filename> foram criados os arquivos:
  502 + <itemizedlist>
  503 + <listitem><emphasis>bookmark_edit.xhtml</emphasis> - página JSF de cadastro e edição de bookmark;</listitem>
  504 + <listitem><emphasis>bookmark_list.xhtml</emphasis> - página JSF de cadastro e edição de bookmark;</listitem>
  505 + <listitem><emphasis>index.html</emphasis> - página HTML que redireciona para a página jsf;</listitem>
  506 + <listitem><emphasis>index.xhtml</emphasis> - página JSF inicial do sistema;</listitem>
  507 + <listitem><emphasis>menu.xhtml</emphasis> - página JSF que monta o menu de navegação.</listitem>
  508 + </itemizedlist>
426 </para> 509 </para>
427 - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"  
428 - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"  
429 - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml">  
430 - <ui:define name="body">  
431 - <h:form>  
432 - <p:dataTable id="list" var="bean" value="#{bookmarkListMB.resultList}">  
433 - <f:facet name="header">#{messages['bookmark.list.table.title']}</f:facet>  
434 - <p:column style="width:1%;">  
435 - <h:selectBooleanCheckbox value="#{bookmarkListMB.selection[bean.id]}" />  
436 - </p:column>  
437 - <p:column style="width:5%;" sortBy="#{bean.id}">  
438 - <f:facet name="header">#{messages['bookmark.label.id']}</f:facet>  
439 - <h:outputText value="#{bean.id}" />  
440 - </p:column>  
441 - <p:column sortBy="#{bean.description}">  
442 - <f:facet name="header">#{messages['bookmark.label.description']}</f:facet>  
443 - <h:commandLink action="#{bookmarkListMB.getNextView}"  
444 - actionListener="#{bookmarkListMB.clear}">  
445 - <h:outputText value="#{bean.description}" />  
446 - <f:param name="id" value="#{bean.id}" />  
447 - </h:commandLink>  
448 - </p:column>  
449 - <p:column sortBy="#{bean.link}">  
450 - <f:facet name="header">#{messages['bookmark.label.link']}</f:facet>  
451 - <h:commandLink action="#{bookmarkListMB.getNextView}"  
452 - actionListener="#{bookmarkListMB.clear}">  
453 - <h:outputText value="#{bean.link}" />  
454 - <f:param name="id" value="#{bean.id}" />  
455 - </h:commandLink>  
456 - </p:column>  
457 - </p:dataTable>  
458 - </h:form>  
459 - </ui:define>  
460 -</ui:composition>]]></programlisting>  
461 - <tip> 510 + <para>
  511 + No diretório <filename>/src/main/webapp/template</filename> foi criado o arquivo:
  512 + <itemizedlist>
  513 + <listitem><emphasis>main.xhtml</emphasis> - página JSF que serve de template referenciada na demais páginas JSF.</listitem>
  514 + </itemizedlist>
  515 + </para>
  516 + <note>
462 <para> 517 <para>
463 Nos arquivos XHTML listados neste exemplo foi empregado o framework 518 Nos arquivos XHTML listados neste exemplo foi empregado o framework
464 <ulink url="http://www.primefaces.org/">PrimeFaces</ulink>, o qual foi um dos primeiros a 519 <ulink url="http://www.primefaces.org/">PrimeFaces</ulink>, o qual foi um dos primeiros a
465 oferecer suporte completo à especificação JSF 2.0. 520 oferecer suporte completo à especificação JSF 2.0.
466 </para> 521 </para>
467 - </tip>  
468 - <para>  
469 - No diretório <filename>/src/main/webapp/</filename>, altere o arquivo  
470 - <filename>menu.xhtml</filename> com o conteúdo seguinte:  
471 - </para>  
472 - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"  
473 - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"  
474 - xmlns:ui="http://java.sun.com/jsf/facelets">  
475 - <h:form>  
476 - <p:menubar>  
477 - <p:submenu label="#{messages['menu.bookmark']}">  
478 - <p:menuitem value="#{messages['menu.menuitem.list']}"  
479 - url="/bookmark_list.jsf" />  
480 - </p:submenu>  
481 - <p:submenu>  
482 - <f:facet name="label">  
483 - <p:menuitem value="#{messages['menu.menuitem.quit']}"  
484 - url="http://www.frameworkdemoiselle.gov.br/" />  
485 - </f:facet>  
486 - </p:submenu>  
487 - </p:menubar>  
488 - </h:form>  
489 -</ui:composition>]]></programlisting> 522 + </note>
490 <para> 523 <para>
491 - No diretório <filename>/src/main/resources/</filename>, altere o arquivo  
492 - <filename>messages.properties</filename> incluindo as linhas a seguir: 524 + No diretório <filename>/src/main/resources/</filename> podemos observar que foi criado o arquivo de recursos
  525 + <filename>messages.properties</filename>. Ao invés de manter fixas as descrições em rótulos, links, botões e
  526 + mensagens em uma aplicação, recomenda-se parametrizar esses textos em arquivos de recursos. Além de ser considerada
  527 + boa prática, essa medida facilita uma posterior internacionalização da aplicação para diversos idiomas.
493 </para> 528 </para>
494 - <programlisting><![CDATA[bookmark.list.table.title=Lista de Links  
495 -bookmark.label.id=ID  
496 -bookmark.label.link=Link  
497 -bookmark.label.description=Descri\u00E7\u00E3o  
498 -bookmark.label=Bookmark  
499 -  
500 -bookmark.alt.id=ID  
501 -bookmark.alt.link=Link  
502 -bookmark.alt.description=Descri\u00E7\u00E3o  
503 -  
504 -menu.bookmark=Bookmarks]]></programlisting>  
505 <note> 529 <note>
506 <para> 530 <para>
507 O arquivo de recursos <filename>messages.properties</filename> armazenará textos 531 O arquivo de recursos <filename>messages.properties</filename> armazenará textos
508 no idioma default da aplicação (neste caso, em Português do Brasil). 532 no idioma default da aplicação (neste caso, em Português do Brasil).
509 </para> 533 </para>
510 </note> 534 </note>
511 - <tip>  
512 - <para>  
513 - Ao invés de manter fixas as descrições em rótulos, links, botões e mensagens em uma  
514 - aplicação, recomenda-se parametrizar esses textos em arquivos de recursos. Além de  
515 - ser considerada boa prática, essa medida facilita uma posterior internacionalização  
516 - da aplicação para diversos idiomas.  
517 - </para>  
518 - </tip>  
519 </section> 535 </section>
520 536
521 <section> 537 <section>
522 <title>Executando no servidor</title> 538 <title>Executando no servidor</title>
523 <para> 539 <para>
524 - A última etapa consiste na construção da aplicação Java Web e no respectivo deploy em um servidor  
525 - de aplicações. 540 + A última etapa consiste em fazer o deploy da Java Web em um servidor de aplicações.
526 </para> 541 </para>
527 <para> 542 <para>
528 Utilizando a IDE Eclipse, basta clicar com o botão direito no projeto <literal>bookmark</literal> e 543 Utilizando a IDE Eclipse, basta clicar com o botão direito no projeto <literal>bookmark</literal> e
529 acessar o menu <guimenu>Run As</guimenu>, <guimenu>Run on Server</guimenu>. Em seguida, escolha um 544 acessar o menu <guimenu>Run As</guimenu>, <guimenu>Run on Server</guimenu>. Em seguida, escolha um
530 - servidor compatível com Java EE 6 (ex: JBoss AS 6) e aguarde a inicialização deste. 545 + servidor compatível com Java EE 6 (ex: JBoss AS 7) e aguarde a inicialização deste.
531 </para> 546 </para>
532 <mediaobject> 547 <mediaobject>
533 <imageobject role="fo"> 548 <imageobject role="fo">
@@ -555,14 +570,6 @@ menu.bookmark=Bookmarks]]&gt;&lt;/programlisting&gt; @@ -555,14 +570,6 @@ menu.bookmark=Bookmarks]]&gt;&lt;/programlisting&gt;
555 direito no servidor desejado e selecione a opção <guimenu>Debug</guimenu>. 570 direito no servidor desejado e selecione a opção <guimenu>Debug</guimenu>.
556 </para> 571 </para>
557 </tip> 572 </tip>
558 - <note>  
559 - <para>  
560 - Também é possível efetuar esses passos em linha de comando. Para isso, execute o comando  
561 - <command>mvn package</command>, copie o arquivo <filename>bookmark.war</filename> resultante  
562 - para a pasta de deploy do servidor (ex: <filename>JBOSS_HOME/server/default/deploy</filename>) e  
563 - inicie este último através de seu comando próprio (ex: <filename>JBOSS_HOME/bin/run.sh</filename>).  
564 - </para>  
565 - </note>  
566 <para> 573 <para>
567 Em seguida, abra o navegador Web de sua preferência e acesse o endereço 574 Em seguida, abra o navegador Web de sua preferência e acesse o endereço
568 <ulink url="http://localhost:8080/bookmark">http://localhost:8080/bookmark</ulink>. Esta é a 575 <ulink url="http://localhost:8080/bookmark">http://localhost:8080/bookmark</ulink>. Esta é a
@@ -582,6 +589,24 @@ menu.bookmark=Bookmarks]]&gt;&lt;/programlisting&gt; @@ -582,6 +589,24 @@ menu.bookmark=Bookmarks]]&gt;&lt;/programlisting&gt;
582 </textobject> 589 </textobject>
583 </mediaobject> 590 </mediaobject>
584 </figure> 591 </figure>
  592 + <para>
  593 + Para cadastrar um novo bookmark basta ir no menu principal: <guimenu>Bookmarks</guimenu>,
  594 + <guimenu>Novo</guimenu>. Executando-a, será exibida a página a seguir:
  595 + </para>
  596 + <figure>
  597 + <title>Tela de cadastro e edição dos dados na aplicação Bookmark</title>
  598 + <mediaobject>
  599 + <imageobject role="fo">
  600 + <imagedata fileref="images/appedit.png" align="center" scalefit="1" />
  601 + </imageobject>
  602 + <imageobject role="html">
  603 + <imagedata fileref="images/appedit.png" align="center" />
  604 + </imageobject>
  605 + <textobject>
  606 + <phrase>Aplicação Bookmark em funcionamento</phrase>
  607 + </textobject>
  608 + </mediaobject>
  609 + </figure>
585 </section> 610 </section>
586 611
587 </chapter> 612 </chapter>
588 \ No newline at end of file 613 \ No newline at end of file
documentation/quickstart/pt-BR/images/appedit.png

40.9 KB | W: | H:

33.6 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
documentation/quickstart/pt-BR/images/apphome.png

88.3 KB | W: | H:

34.5 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
documentation/quickstart/pt-BR/images/appvalid.png

46.5 KB | W: | H:

40.7 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
documentation/quickstart/pt-BR/images/viewserver.png

22.1 KB | W: | H:

32.7 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
documentation/quickstart/pt-BR/instalacao.xml
1 <?xml version='1.0' encoding="utf-8"?> 1 <?xml version='1.0' encoding="utf-8"?>
2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 -<chapter id="instalacao">  
5 -  
6 - <title>Instalação</title>  
7 -  
8 - <section>  
9 - <title>Pré-requisitos</title>  
10 - <informaltable>  
11 - <tgroup cols="3">  
12 - <colspec colwidth="50*" />  
13 - <colspec colwidth="10*" />  
14 - <colspec colwidth="40*" />  
15 - <tbody>  
16 - <row>  
17 - <entry>  
18 - <emphasis role="bold">Software</emphasis>  
19 - </entry>  
20 - <entry>  
21 - <emphasis role="bold">Versão</emphasis>  
22 - </entry>  
23 - <entry>  
24 - <emphasis role="bold">Site (Download)</emphasis>  
25 - </entry>  
26 - </row>  
27 - <row>  
28 - <entry>Java Development Kit (JDK)</entry>  
29 - <entry>6.0</entry>  
30 - <entry><ulink url="http://openjdk.org/"><citetitle>openjdk.org</citetitle></ulink></entry>  
31 - </row>  
32 - <row>  
33 - <entry>Apache Maven</entry>  
34 - <entry>2.2</entry>  
35 - <entry><ulink url="http://maven.apache.org/docs/2.2.1/release-notes.html"><citetitle>maven.apache.org</citetitle></ulink></entry>  
36 - </row>  
37 - <row>  
38 - <entry>Eclipse IDE</entry>  
39 - <entry>3.7</entry>  
40 - <entry><ulink url="http://www.eclipse.org/downloads/packages/release/indigo/r"><citetitle>www.eclipse.org</citetitle></ulink></entry>  
41 - </row>  
42 - <row>  
43 - <entry>m2eclipse plugin</entry>  
44 - <entry>0.12</entry>  
45 - <entry><ulink url="http://m2eclipse.sonatype.org/installing-m2eclipse.html"><citetitle>m2eclipse.sonatype.org</citetitle></ulink></entry>  
46 - </row>  
47 - <row>  
48 - <entry>JBoss Application Server</entry>  
49 - <entry>6.0</entry>  
50 - <entry><ulink url="http://sourceforge.net/projects/jboss/files/JBoss/JBoss-6.0.0.Final/jboss-as-distribution-6.0.0.Final.zip/download"><citetitle>www.jboss.org</citetitle></ulink></entry>  
51 - </row>  
52 - </tbody>  
53 - </tgroup>  
54 - </informaltable>  
55 - </section>  
56 -  
57 - <section>  
58 - <title>Demoiselle Infra</title>  
59 - <para>  
60 - Para auxiliar no preparo do ambiente integrado de desenvolvimento utilizado na presente  
61 - documentação, recomenda-se a utilização dos pacotes de software fornecidos pelo projeto  
62 - <ulink url="http://demoiselle.sourceforge.net/infra/"><citetitle>Demoiselle Infra</citetitle></ulink>.  
63 - Neste link você encontrará as orientações necessárias para a sua configuração. 4 + <chapter id="instalacao">
  5 + <title>Instalação</title>
  6 + <section>
  7 + <title>Pré-requisitos</title>
  8 + <informaltable>
  9 + <tgroup cols="3">
  10 + <colspec colwidth="50*" />
  11 + <colspec colwidth="10*" />
  12 + <colspec colwidth="40*" />
  13 + <tbody>
  14 + <row>
  15 + <entry>
  16 + <emphasis role="bold">Software</emphasis>
  17 + </entry>
  18 + <entry>
  19 + <emphasis role="bold">Versão</emphasis>
  20 + </entry>
  21 + <entry>
  22 + <emphasis role="bold">Site (Download)</emphasis>
  23 + </entry>
  24 + </row>
  25 + <row>
  26 + <entry>Java Development Kit (JDK)</entry>
  27 + <entry>6.0</entry>
  28 + <entry>
  29 + <ulink url="http://openjdk.org/">
  30 + <citetitle>openjdk.org</citetitle>
  31 + </ulink>
  32 + </entry>
  33 + </row>
  34 + <row>
  35 + <entry>Apache Maven</entry>
  36 + <entry>2.2</entry>
  37 + <entry>
  38 + <ulink url="http://maven.apache.org/docs/2.2.1/release-notes.html">
  39 + <citetitle>maven.apache.org</citetitle>
  40 + </ulink>
  41 + </entry>
  42 + </row>
  43 + <row>
  44 + <entry>Eclipse IDE</entry>
  45 + <entry>3.7</entry>
  46 + <entry>
  47 + <ulink url="http://www.eclipse.org/downloads/packages/release/indigo/r">
  48 + <citetitle>www.eclipse.org</citetitle>
  49 + </ulink>
  50 + </entry>
  51 + </row>
  52 + <row>
  53 + <entry>m2eclipse plugin</entry>
  54 + <entry>0.12</entry>
  55 + <entry>
  56 + <ulink url="http://m2eclipse.sonatype.org/installing-m2eclipse.html">
  57 + <citetitle>m2eclipse.sonatype.org</citetitle>
  58 + </ulink>
  59 + </entry>
  60 + </row>
  61 + <row>
  62 + <entry>JBoss Application Server</entry>
  63 + <entry>7.1.1</entry>
  64 + <entry>
  65 + <ulink url="http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip">
  66 + <citetitle>www.jboss.org</citetitle>
  67 + </ulink>
  68 + </entry>
  69 + </row>
  70 + </tbody>
  71 + </tgroup>
  72 + </informaltable>
  73 + </section>
  74 + <section>
  75 + <title>Demoiselle Infra</title>
  76 + <para>
  77 + Para auxiliar no preparo do ambiente integrado de desenvolvimento utilizado na presente
  78 + documentação, recomenda-se a utilização dos pacotes de software fornecidos pelo projeto
  79 + <ulink url="http://demoiselle.sourceforge.net/infra/"><citetitle>Demoiselle Infra</citetitle></ulink>.
  80 + Neste link você encontrará as orientações necessárias para a sua configuração.
  81 + </para>
  82 + <note>
  83 + <para>
  84 + Atualmente são disponibilizados pacotes exclusivamente para a plataforma <emphasis>GNU/Linux</emphasis>
  85 + e distribuições baseadas no <emphasis>Debian</emphasis>, tal como <emphasis>Ubuntu</emphasis>.
64 </para> 86 </para>
65 - <note>  
66 - <para>  
67 - Atualmente são disponibilizados pacotes exclusivamente para a plataforma <emphasis>GNU/Linux</emphasis>  
68 - e distribuições baseadas no <emphasis>Debian</emphasis>, tal como <emphasis>Ubuntu</emphasis>.  
69 - </para>  
70 - </note>  
71 - <para> 87 + </note>
  88 + <para>
72 Se você não utiliza nenhum dos sistemas operacionais citados, terá que baixar e instalar 89 Se você não utiliza nenhum dos sistemas operacionais citados, terá que baixar e instalar
73 todos os softwares listados acima. Para auxiliar um pouco o processo, disponibilizamos alguns 90 todos os softwares listados acima. Para auxiliar um pouco o processo, disponibilizamos alguns
74 - vídeos <ulink url="http://www.frameworkdemoiselle.gov.br/documentacaodoprojeto/tutoriais/videos/">  
75 - <citetitle>aqui</citetitle></ulink> de demonstração de algumas fases.  
76 - </para>  
77 - </section>  
78 -  
79 -</chapter>  
80 \ No newline at end of file 91 \ No newline at end of file
  92 + vídeos <ulink url="http://www.frameworkdemoiselle.gov.br/documentacaodoprojeto/manuais-e-tutoriais/tutoriais-da-versao-2/">
  93 + <citetitle>aqui</citetitle></ulink> de demonstração de algumas fases.
  94 + </para>
  95 + </section>
  96 + </chapter>
documentation/quickstart/pt-BR/master.xml
1 <?xml version='1.0' encoding="utf-8"?> 1 <?xml version='1.0' encoding="utf-8"?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 -<book lang="pt"> 4 + <book lang="pt">
  5 + <xi:include href="bookinfo.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  6 + <xi:include href="preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  7 + <xi:include href="instalacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  8 + <xi:include href="criacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  9 + <xi:include href="melhoria.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  10 + </book>
  11 +
  12 +<!--
  13 +
  14 + <xi:include href="avancado.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  15 +-->
5 16
6 - <xi:include href="bookinfo.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
7 -  
8 - <preface>  
9 - <title>Sobre o QuickStart</title>  
10 - <para>  
11 - Este documento é um tutorial do tipo "passo a passo" que visa ilustrar de forma rápida, clara e prática  
12 - a criação de uma aplicação simples utilizando o <emphasis>Demoiselle Framework 2.X</emphasis>.  
13 - </para>  
14 - <note>  
15 - <para>  
16 - Apesar de o <emphasis>Demoiselle Framework 2.X</emphasis> ser simples de usar, o desenvolvimento de  
17 - aplicações não triviais requer o conhecimento das diversas tecnologias envolvidas na especificação  
18 - <emphasis>Java EE</emphasis>, incluindo:  
19 - <itemizedlist>  
20 - <listitem>Linguagem Java</listitem>  
21 - <listitem>Servlets, JSP e Tag Libraries</listitem>  
22 - <listitem>JavaBeans</listitem>  
23 - <listitem>HTML e XML</listitem>  
24 - <listitem>Contêineres e Servidores Web</listitem>  
25 - </itemizedlist>  
26 - </para>  
27 - </note>  
28 - <note>  
29 - <para>  
30 - Esta documentação refere-se à release 2.2.X do <emphasis>Demoiselle Framework</emphasis>  
31 - e pode diferir significativamente das versões anteriores.  
32 - </para>  
33 - </note>  
34 - </preface>  
35 -  
36 - <xi:include href="instalacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
37 - <xi:include href="criacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
38 - <xi:include href="melhoria.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
39 -<!-- <xi:include href="avancado.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />-->  
40 -  
41 -</book>  
42 \ No newline at end of file 17 \ No newline at end of file
documentation/quickstart/pt-BR/melhoria.xml
@@ -6,359 +6,80 @@ @@ -6,359 +6,80 @@
6 <title>Melhorando a aplicação</title> 6 <title>Melhorando a aplicação</title>
7 7
8 <section> 8 <section>
9 - <title>Implementando funcionalidade de edição</title>  
10 - <para>  
11 - Agora que a aplicação inicial já está rodando, iremos aumentar sua complexidade adicionando a  
12 - funcionalidade de edição dos registros de bookmark.  
13 - </para>  
14 - <para>  
15 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> crie a classe  
16 - <literal>BookmarkEditMB</literal>, a qual será responsável por controlar as modificações sobre  
17 - os bookmarks efetuadas pelo usuário:  
18 - </para>  
19 - <programlisting role="JAVA"><![CDATA[@ViewController  
20 -@PreviousView("/bookmark_list.xhtml")  
21 -public class BookmarkEditMB extends AbstractEditPageBean<Bookmark, Long> {  
22 -  
23 - private static final long serialVersionUID = 1L;  
24 -  
25 - @Inject  
26 - private BookmarkBC bc;  
27 -  
28 - @Override  
29 - @Transactional  
30 - public String delete() {  
31 - bc.delete(getId());  
32 - return getPreviousView();  
33 - }  
34 -  
35 - @Override  
36 - @Transactional  
37 - public String insert() {  
38 - bc.insert(getBean());  
39 - return getPreviousView();  
40 - }  
41 -  
42 - @Override  
43 - @Transactional  
44 - public String update() {  
45 - bc.update(getBean());  
46 - return getPreviousView();  
47 - }  
48 -  
49 - @Override  
50 - protected void handleLoad() {  
51 - setBean(bc.load(getId()));  
52 - }  
53 -  
54 -}]]></programlisting>  
55 - <tip>  
56 - <para>  
57 - A anotação <literal>@Transactional</literal> trata-se de uma anotação fornecida pelo  
58 - <emphasis>Demoiselle Framework</emphasis> para indicar que o método em questão  
59 - será incluído na sessão transacional. Caso essa anotação esteja vinculada na classe,  
60 - todos os seus métodos serão considerados transacionais.  
61 - </para>  
62 - </tip>  
63 - <para>  
64 - A classe <literal>AbstractEditPageBean</literal> faz parte do código de suporte fornecido pelo  
65 - <emphasis>Demoiselle Framework</emphasis> (especificamente na extensão JSF). Ao utilizá-la,  
66 - o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de  
67 - cadastro (i.e., do tipo <emphasis>CRUD</emphasis>).  
68 - </para>  
69 - <para>  
70 - Ainda no pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> altere a classe  
71 - <literal>BookmarkListMB</literal>:  
72 - </para>  
73 - <programlistingco>  
74 - <areaspec>  
75 - <area id="next-prev-view" coords="2"/>  
76 - <area id="delete-selection" coords="16"/>  
77 - </areaspec>  
78 - <programlisting role="JAVA"><![CDATA[@ViewController  
79 -@NextView("/bookmark_edit.xhtml")  
80 -@PreviousView("/bookmark_list.xhtml")  
81 -public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> {  
82 -  
83 - private static final long serialVersionUID = 1L;  
84 -  
85 - @Inject  
86 - private BookmarkBC bc;  
87 -  
88 - @Override  
89 - protected List<Bookmark> handleResultList() {  
90 - return bc.findAll();  
91 - }  
92 -  
93 - @Transactional  
94 - public String deleteSelection() {  
95 - boolean delete = false;  
96 - Iterator<Long> iter = getSelection().keySet().iterator();  
97 - while (iter.hasNext()) {  
98 - Long id = iter.next();  
99 - delete = getSelection().get(id);  
100 - if (delete) {  
101 - bc.delete(id);  
102 - iter.remove();  
103 - }  
104 - }  
105 - return getPreviousView();  
106 - }  
107 -  
108 -}]]></programlisting>  
109 - <calloutlist>  
110 - <callout arearefs="next-prev-view">  
111 - <para>  
112 - A anotação <literal>@NextView</literal> serve para definir a próxima  
113 - visão a ser direcionado o fluxo de navegação JSF. De forma semelhante,  
114 - a anotação <literal>@PreviousView</literal> define a visão anterior  
115 - de um fluxo.  
116 - </para>  
117 - </callout>  
118 - <callout arearefs="delete-selection">  
119 - <para>  
120 - O novo método <function>deleteSelection()</function> servirá para  
121 - permitir a funcionalidade de exclusão de múltiplas linhas da tabela.  
122 - A anotação <literal>@Transactional</literal> nele faz com que o método  
123 - seja considerado como transacional, incluindo-o na respectiva sessão.  
124 - </para>  
125 - </callout>  
126 - </calloutlist>  
127 - </programlistingco>  
128 - <para>  
129 - No diretório <filename>/src/main/webapp/</filename>, crie o arquivo  
130 - <filename>bookmark_edit.xhtml</filename> com o conteúdo seguinte:  
131 - </para>  
132 - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"  
133 - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"  
134 - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml">  
135 - <ui:define name="body">  
136 - <h:form prependId="false">  
137 - <p:toolbar>  
138 - <p:toolbarGroup align="left">  
139 - <p:commandButton value="#{messages['button.save']}"  
140 - action="#{bookmarkEditMB.insert}"  
141 - rendered="#{!bookmarkEditMB.updateMode}" ajax="false" />  
142 - <p:commandButton value="#{messages['button.save']}"  
143 - action="#{bookmarkEditMB.update}"  
144 - rendered="#{bookmarkEditMB.updateMode}" ajax="false" />  
145 - <p:commandButton value="#{messages['button.delete']}"  
146 - onclick="confirmation.show()" rendered="#{bookmarkEditMB.updateMode}"  
147 - type="button" immediate="true" ajax="false" />  
148 - <p:confirmDialog message="#{messages['label.confirm.delete']}"  
149 - showEffect="bounce" hideEffect="explode"  
150 - header="#{messages['label.dialog.delete']}"  
151 - severity="alert" widgetVar="confirmation">  
152 - <h:commandButton value="#{messages['button.dialog.yes']}"  
153 - action="#{bookmarkEditMB.delete}" immediate="true" ajax="false" />  
154 - <h:commandButton value="#{messages['button.dialog.no']}"  
155 - onclick="confirmation.hide()" type="button" />  
156 - </p:confirmDialog>  
157 - </p:toolbarGroup>  
158 - </p:toolbar>  
159 - <br />  
160 - <p:fieldset legend="#{messages['bookmark.label']}" toggleable="true"  
161 - toggleSpeed="500">  
162 - <h:panelGrid id="fields" columns="3">  
163 - <h:outputLabel value="#{messages['bookmark.label.id']}: "  
164 - for="id" styleClass="text-input" />  
165 - <h:outputText id="id" value="#{bookmarkEditMB.bean.id}" />  
166 - <p:message for="id" />  
167 - <h:outputLabel value="#{messages['bookmark.label.description']}: "  
168 - for="description" styleClass="text-input" />  
169 - <h:inputText id="description" value="#{bookmarkEditMB.bean.description}"  
170 - title="#{messages['bookmark.alt.description']}" />  
171 - <p:message for="description" />  
172 - <h:outputLabel value="#{messages['bookmark.label.link']}: "  
173 - for="link" styleClass="text-input" />  
174 - <h:inputText id="link" value="#{bookmarkEditMB.bean.link}"  
175 - title="#{messages['bookmark.alt.link']}" />  
176 - <p:message for="link" />  
177 - </h:panelGrid>  
178 - </p:fieldset>  
179 - </h:form>  
180 - </ui:define>  
181 -</ui:composition>]]></programlisting>  
182 - <para>  
183 - Ainda no diretório <filename>/src/main/webapp/</filename>, modifique o arquivo  
184 - <filename>bookmark_list.xhtml</filename> com o conteúdo seguinte:  
185 - </para>  
186 - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"  
187 - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"  
188 - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml">  
189 - <ui:define name="body">  
190 - <h:form>  
191 - <p:toolbar>  
192 - <p:toolbarGroup align="left">  
193 - <p:commandButton title="#{messages['button.new']}"  
194 - image="ui-icon-document" action="#{bookmarkListMB.getNextView}"  
195 - actionListener="#{bookmarkListMB.clear}" ajax="false" />  
196 - <p:commandButton title="#{messages['button.delete']}"  
197 - image="ui-icon-trash" onclick="confirmation.show()" type="button"  
198 - immediate="true" ajax="false" />  
199 - <p:confirmDialog message="#{messages['label.confirm.delete']}"  
200 - showEffect="bounce" hideEffect="explode"  
201 - header="#{messages['label.dialog.alert']}!"  
202 - severity="alert" widgetVar="confirmation">  
203 - <h:commandButton value="#{messages['button.dialog.yes']}"  
204 - action="#{bookmarkListMB.deleteSelection}"  
205 - actionListener="#{bookmarkListMB.clear}" />  
206 - <h:commandButton value="#{messages['button.dialog.no']}"  
207 - onclick="confirmation.hide()" type="button" />  
208 - </p:confirmDialog>  
209 - </p:toolbarGroup>  
210 - </p:toolbar>  
211 - <p:dataTable id="list" var="bean" value="#{bookmarkListMB.resultList}">  
212 - <f:facet name="header">#{messages['bookmark.list.table.title']}</f:facet>  
213 - <p:column style="width:1%;">  
214 - <h:selectBooleanCheckbox value="#{bookmarkListMB.selection[bean.id]}" />  
215 - </p:column>  
216 - <p:column style="width:5%;" sortBy="#{bean.id}">  
217 - <f:facet name="header">#{messages['bookmark.label.id']}</f:facet>  
218 - <h:outputText value="#{bean.id}" />  
219 - </p:column>  
220 - <p:column sortBy="#{bean.description}">  
221 - <f:facet name="header">#{messages['bookmark.label.description']}</f:facet>  
222 - <h:commandLink action="#{bookmarkListMB.getNextView}"  
223 - actionListener="#{bookmarkListMB.clear}">  
224 - <h:outputText value="#{bean.description}" />  
225 - <f:param name="id" value="#{bean.id}" />  
226 - </h:commandLink>  
227 - </p:column>  
228 - <p:column sortBy="#{bean.link}">  
229 - <f:facet name="header">#{messages['bookmark.label.link']}</f:facet>  
230 - <h:commandLink action="#{bookmarkListMB.getNextView}"  
231 - actionListener="#{bookmarkListMB.clear}">  
232 - <h:outputText value="#{bean.link}" />  
233 - <f:param name="id" value="#{bean.id}" />  
234 - </h:commandLink>  
235 - </p:column>  
236 - </p:dataTable>  
237 - </h:form>  
238 - </ui:define>  
239 -</ui:composition>]]></programlisting>  
240 - <para>  
241 - No diretório <filename>/src/main/webapp/</filename>, altere o arquivo  
242 - <filename>menu.xhtml</filename> conforme o conteúdo seguinte:  
243 - </para>  
244 - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"  
245 - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"  
246 - xmlns:ui="http://java.sun.com/jsf/facelets">  
247 - <h:form>  
248 - <p:menubar>  
249 - <p:submenu label="#{messages['menu.bookmark']}">  
250 - <p:menuitem value="#{messages['menu.menuitem.new']}"  
251 - url="/bookmark_edit.jsf" />  
252 - <p:menuitem value="#{messages['menu.menuitem.list']}"  
253 - url="/bookmark_list.jsf" />  
254 - </p:submenu>  
255 - <p:submenu>  
256 - <f:facet name="label">  
257 - <p:menuitem value="#{messages['menu.menuitem.quit']}"  
258 - url="http://www.frameworkdemoiselle.gov.br/" />  
259 - </f:facet>  
260 - </p:submenu>  
261 - </p:menubar>  
262 - </h:form>  
263 -</ui:composition>]]></programlisting>  
264 - <para>  
265 - Tendo feito todas essas alterações, reconstrua o projeto Java e faça novo deploy no  
266 - servidor de aplicações. Ao acessar a aplicação <literal>bookmark</literal> pelo browser,  
267 - verá que agora existe uma opção nova no menu principal: <guimenu>Bookmarks</guimenu>,  
268 - <guimenu>Novo</guimenu>. Executando-a, será exibida a página a seguir:  
269 - </para>  
270 - <figure>  
271 - <title>Edição dos dados na aplicação Bookmark</title>  
272 - <mediaobject>  
273 - <imageobject role="fo">  
274 - <imagedata fileref="images/appedit.png" align="center" scalefit="1" />  
275 - </imageobject>  
276 - <imageobject role="html">  
277 - <imagedata fileref="images/appedit.png" align="center" />  
278 - </imageobject>  
279 - <textobject>  
280 - <phrase>Aplicação Bookmark em funcionamento</phrase>  
281 - </textobject>  
282 - </mediaobject>  
283 - </figure>  
284 - </section>  
285 -  
286 - <section>  
287 <title>Exibindo mensagens para o usuário</title> 9 <title>Exibindo mensagens para o usuário</title>
288 <para> 10 <para>
289 Uma vez que o objetivo principal da aplicação foi concluído (i.e., listagem e edição de bookmarks), 11 Uma vez que o objetivo principal da aplicação foi concluído (i.e., listagem e edição de bookmarks),
290 - veremos algumas funcionalidades adicionais fornecidas pelo <emphasis>Demoiselle Framework</emphasis>, 12 + veremos algumas funcionalidades adicionais fornecidas pelo <emphasis>Demoiselle Framework 2</emphasis>,
291 iniciando pelo tratamento de mensagens. 13 iniciando pelo tratamento de mensagens.
292 </para> 14 </para>
293 <para> 15 <para>
294 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.message</literal> crie a interface 16 + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.message</literal> crie a interface
295 <literal>InfoMessages</literal>, a qual servirá para armazenar mensagens informativas a serem 17 <literal>InfoMessages</literal>, a qual servirá para armazenar mensagens informativas a serem
296 exibidas ao usuário: 18 exibidas ao usuário:
297 </para> 19 </para>
298 - <programlisting role="JAVA"><![CDATA[public interface InfoMessages {  
299 -  
300 - final Message BOOKMARK_DELETE_OK = new DefaultMessage("{bookmark-delete-ok}");  
301 - final Message BOOKMARK_INSERT_OK = new DefaultMessage("{bookmark-insert-ok}");  
302 - final Message BOOKMARK_UPDATE_OK = new DefaultMessage("{bookmark-update-ok}");  
303 -  
304 -}]]></programlisting> 20 + <programlisting role="JAVA">
  21 + <![CDATA[public interface InfoMessages {
  22 + final Message BOOKMARK_DELETE_OK = new DefaultMessage("{bookmark-delete-ok}");
  23 + final Message BOOKMARK_INSERT_OK = new DefaultMessage("{bookmark-insert-ok}");
  24 + final Message BOOKMARK_UPDATE_OK = new DefaultMessage("{bookmark-update-ok}");
  25 + }]]></programlisting>
305 <note> 26 <note>
306 - <para>  
307 - A unidade básica de manipulação de mensagens no <emphasis>Demoiselle Framework</emphasis>  
308 - é a interface <literal>Message</literal>. Ou seja, basta que esta última seja implementada na  
309 - aplicação para que o contexto de mensagens possa manipulá-la.  
310 - A classe <literal>DefaultMessage</literal> é oferecida como implementação padrão dessa interface.  
311 - </para> 27 + <para>
  28 + A unidade básica de manipulação de mensagens no <emphasis>Demoiselle Framework 2</emphasis>
  29 + é a interface <literal>Message</literal>. Ou seja, basta que esta última seja implementada na
  30 + aplicação para que o contexto de mensagens possa manipulá-la.
  31 + A classe <literal>DefaultMessage</literal> é oferecida como implementação padrão dessa interface.
  32 + </para>
312 </note> 33 </note>
313 <para> 34 <para>
314 No exemplo em questão, o texto das mensagens será recuperado do arquivo de recursos 35 No exemplo em questão, o texto das mensagens será recuperado do arquivo de recursos
315 <filename>messages.properties</filename> previamente criado no diretório 36 <filename>messages.properties</filename> previamente criado no diretório
316 <filename>/src/main/resources/</filename>. Para isso, adicione as seguintes linhas nesse arquivo: 37 <filename>/src/main/resources/</filename>. Para isso, adicione as seguintes linhas nesse arquivo:
317 </para> 38 </para>
318 -<programlisting role="XML"><![CDATA[bookmark-delete-ok=Bookmark exclu\u00EDdo\: {0} 39 + <programlisting role="XML">
  40 +<![CDATA[bookmark-delete-ok=Bookmark exclu\u00EDdo\: {0}
319 bookmark-insert-ok=Bookmark inserido: {0} 41 bookmark-insert-ok=Bookmark inserido: {0}
320 -bookmark-update-ok=Bookmark atualizado: {0}]]></programlisting> 42 +bookmark-update-ok=Bookmark atualizado: {0}]]>
  43 + </programlisting>
321 <para> 44 <para>
322 - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.business</literal> altere a classe 45 + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.business</literal> altere a classe
323 <literal>BookmarkBC</literal> incluindo os trechos de código indicados a seguir: 46 <literal>BookmarkBC</literal> incluindo os trechos de código indicados a seguir:
324 </para> 47 </para>
325 <programlistingco> 48 <programlistingco>
326 <areaspec> 49 <areaspec>
327 <area id="inject-context" coords="5"/> 50 <area id="inject-context" coords="5"/>
328 <areaset id="add-msg-context" coords=""> 51 <areaset id="add-msg-context" coords="">
329 - <area id="" coords="12"/>  
330 - <area id="" coords="19"/>  
331 - <area id="" coords="26"/> 52 + <area id="" coords="10"/>
  53 + <area id="" coords="17"/>
  54 + <area id="" coords="23"/>
332 </areaset> 55 </areaset>
333 </areaspec> 56 </areaspec>
334 - <programlisting role="JAVA"><![CDATA[@BusinessController  
335 -public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { 57 + <programlisting role="JAVA">
  58 +<![CDATA[@BusinessController
  59 + public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> {
336 60
337 - @Inject  
338 - private MessageContext messageContext; 61 + @Inject
  62 + private MessageContext messageContext;
339 63
340 - ... 64 + ...
341 65
342 - @Override  
343 - public void insert(Bookmark bookmark) {  
344 - super.insert(bookmark);  
345 - messageContext.add(InfoMessages.BOOKMARK_INSERT_OK,  
346 - bookmark.getDescription());  
347 - }  
348 -  
349 - @Override  
350 - public void update(Bookmark bookmark) {  
351 - super.update(bookmark);  
352 - messageContext.add(InfoMessages.BOOKMARK_UPDATE_OK,  
353 - bookmark.getDescription());  
354 - } 66 + @Override
  67 + public void insert(Bookmark bookmark) {
  68 + super.insert(bookmark);
  69 + messageContext.add(InfoMessages.BOOKMARK_INSERT_OK, bookmark.getDescription());
  70 + }
355 71
356 - @Override  
357 - public void delete(Long id) {  
358 - super.delete(id);  
359 - messageContext.add(InfoMessages.BOOKMARK_DELETE_OK, id);  
360 - } 72 + @Override
  73 + public void update(Bookmark bookmark) {
  74 + super.update(bookmark);
  75 + messageContext.add(InfoMessages.BOOKMARK_UPDATE_OK, bookmark.getDescription());
  76 + }
361 77
  78 + @Override
  79 + public void delete(Long id) {
  80 + super.delete(id);
  81 + messageContext.add(InfoMessages.BOOKMARK_DELETE_OK, id);
  82 + }
362 }]]></programlisting> 83 }]]></programlisting>
363 <calloutlist> 84 <calloutlist>
364 <callout arearefs="inject-context"> 85 <callout arearefs="inject-context">
@@ -410,119 +131,123 @@ public class BookmarkBC extends DelegateCrud&lt;Bookmark, Long, BookmarkDAO&gt; { @@ -410,119 +131,123 @@ public class BookmarkBC extends DelegateCrud&lt;Bookmark, Long, BookmarkDAO&gt; {
410 </section> 131 </section>
411 132
412 <section> 133 <section>
413 - <title>Criando regras de validação nos campos</title>  
414 - <para>  
415 - Sendo aderente à especificação Java EE 6, o <emphasis>Demoiselle Framework</emphasis>  
416 - recomenda e faz uso do mecanismo de validação provido pela especificação  
417 - <ulink url="http://jcp.org/en/jsr/detail?id=303">JSR-303 (Bean Validation)</ulink>.  
418 - </para>  
419 - <para>  
420 - A fim de testarmos mais essa funcionalidade, utilizaremos a implementação de validação  
421 - <emphasis>Hibernate Validator</emphasis>. Para tal, abra o arquivo <filename>pom.xml</filename>  
422 - do projeto <literal>bookmark</literal> e inclua nele a seguinte dependência:  
423 - </para>  
424 - <programlisting role="XML"><![CDATA[<dependencies>  
425 - ...  
426 - <dependency>  
427 - <groupId>org.hibernate</groupId>  
428 - <artifactId>hibernate-validator</artifactId>  
429 - <version>4.1.0.Final</version>  
430 - </dependency>  
431 -</dependencies>]]></programlisting>  
432 - <note> 134 + <title>Criando regras de validação nos campos</title>
433 <para> 135 <para>
434 - O objetivo dessa abordagem de validação é auxiliar na criação de restrições diretamente nas  
435 - entidades de domínio. Tais restrições serão utilizadas de forma conjunta nas camadas de  
436 - persistência e apresentação da aplicação. A vantagem é que elas são facilmente configuráveis,  
437 - bastando apenas incluir certas anotações (ex: <literal>@NotNull</literal>, <literal>@Size</literal>)  
438 - nos campos da classe a ser validada. 136 + Sendo aderente à especificação Java EE 6, o <emphasis>Demoiselle Framework</emphasis>
  137 + recomenda e faz uso do mecanismo de validação provido pela especificação
  138 + <ulink url="http://jcp.org/en/jsr/detail?id=303">JSR-303 (Bean Validation)</ulink>.
439 </para> 139 </para>
440 - </note>  
441 - <para>  
442 - No pacote <literal>br.gov.frameworkdemoiselle.sample.domain</literal> altere a entidade de domínio  
443 - <literal>Bookmark</literal> incluindo as anotações de validação nos campos <literal>description</literal>  
444 - e <literal>link</literal> conforme ilustrado a seguir:  
445 - </para>  
446 - <programlistingco>  
447 - <areaspec>  
448 - <area id="valid-desc" coords="9"/>  
449 - <area id="valid-link" coords="14"/>  
450 - </areaspec>  
451 - <programlisting role="JAVA"><![CDATA[@Entity  
452 -public class Bookmark {  
453 -  
454 - @Id  
455 - @GeneratedValue  
456 - private Long id;  
457 -  
458 - @Column  
459 - @NotNull  
460 - @Size(min = 1, max = 20)  
461 - private String description;  
462 -  
463 - @Column  
464 - @NotNull  
465 - @NotBlank  
466 - @Size(max = 255)  
467 - @URL  
468 - private String link;  
469 -  
470 - ...  
471 -}]]></programlisting>  
472 - <calloutlist>  
473 - <callout arearefs="valid-desc">  
474 - <para>  
475 - No campo <literal>description</literal>, a anotação <literal>@NotNull</literal> serve  
476 - para impedir que o valor nulo seja atribuído a ele. Já a anotação <literal>@Size</literal>  
477 - restringe a quantidade mínima e máxima de caracteres no campo.  
478 - </para>  
479 - </callout>  
480 - <callout arearefs="valid-link">  
481 - <para>  
482 - No campo <literal>link</literal> mais restrições são aplicadas. Além de não permitir o valor  
483 - nulo (com <literal>@NotNull</literal>) e estipular o comprimento máximo de 255 caracteres  
484 - (com <literal>@Size</literal>), o campo não pode ficar vazio (com <literal>@NotBlank</literal>)  
485 - e seu conteúdo deve ser um endereço de Internet válido (com <literal>@URL</literal>).  
486 - </para>  
487 - </callout>  
488 - </calloutlist>  
489 - </programlistingco>  
490 - <tip>  
491 <para> 140 <para>
492 - Validações de campos específicos para a comunidade brasileira são oferecidos pelo componente  
493 - <emphasis>Demoiselle Validation</emphasis>. Com ele, as seguintes anotações podem ser aplicadas nas  
494 - classes de domínio: <literal>@Cep</literal>, <literal>@Cnpj</literal>, <literal>@Cpf</literal>,  
495 - <literal>@InscricaoEstadual</literal> e <literal>@PisPasep</literal>. 141 + A fim de testarmos mais essa funcionalidade, utilizaremos a implementação de validação
  142 + <emphasis>Hibernate Validator</emphasis>. Para tal, abra o arquivo <filename>pom.xml</filename>
  143 + do projeto <literal>bookmark</literal> e inclua nele a seguinte dependência:
496 </para> 144 </para>
497 - </tip>  
498 - <para>  
499 - Assim que você efetuar as modificações, reconstrua o projeto Java e faça novo deploy no servidor de  
500 - aplicações. Acesse a aplicação <literal>bookmark</literal> e, na tela de edição de bookmarks, deixe  
501 - vazios os campos no formulário e clique em <guibutton>Salvar</guibutton>. Tente também preencher um  
502 - endereço de Internet inválido no campo <literal>Link</literal>. Caixas de erro com as mensagens  
503 - referentes as validações devem aparecer ao lado de cada campo, tal como ilustrado:  
504 - </para>  
505 - <figure>  
506 - <title>Validação de campos na aplicação Bookmark</title>  
507 - <mediaobject>  
508 - <imageobject role="fo">  
509 - <imagedata fileref="images/appvalid.png" align="center" scalefit="1" />  
510 - </imageobject>  
511 - <imageobject role="html">  
512 - <imagedata fileref="images/appvalid.png" align="center" />  
513 - </imageobject>  
514 - <textobject>  
515 - <phrase>Aplicação Bookmark em funcionamento</phrase>  
516 - </textobject>  
517 - </mediaobject>  
518 - </figure>  
519 - <tip> 145 + <programlisting role="XML">
  146 + <![CDATA[<dependencies>
  147 + ...
  148 + <dependency>
  149 + <groupId>org.hibernate</groupId>
  150 + <artifactId>hibernate-validator</artifactId>
  151 + <version>4.3.0.Final</version>
  152 + </dependency>
  153 + </dependencies>]]>
  154 + </programlisting>
  155 + <note>
  156 + <para>
  157 + O objetivo dessa abordagem de validação é auxiliar na criação de restrições diretamente nas
  158 + entidades de domínio. Tais restrições serão utilizadas de forma conjunta nas camadas de
  159 + persistência e apresentação da aplicação. A vantagem é que elas são facilmente configuráveis,
  160 + bastando apenas incluir certas anotações (ex: <literal>@NotNull</literal>, <literal>@Size</literal>)
  161 + nos campos da classe a ser validada.
  162 + </para>
  163 + </note>
  164 + <para>
  165 + No pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.domain</literal> altere a entidade de domínio
  166 + <literal>Bookmark</literal> incluindo as anotações de validação nos campos <literal>description</literal>
  167 + e <literal>link</literal> conforme ilustrado a seguir:
  168 + </para>
  169 + <programlistingco>
  170 + <areaspec>
  171 + <area id="valid-desc" coords="9"/>
  172 + <area id="valid-link" coords="14"/>
  173 + </areaspec>
  174 + <programlisting role="JAVA">
  175 + <![CDATA[@Entity
  176 + public class Bookmark {
  177 +
  178 + @Id
  179 + @GeneratedValue
  180 + private Long id;
  181 +
  182 + @Column
  183 + @NotNull
  184 + @Size(min = 1, max = 30)
  185 + private String description;
  186 +
  187 + @Column
  188 + @NotNull
  189 + @NotBlank
  190 + @Size(max = 255)
  191 + @URL
  192 + private String link;
  193 +
  194 + ...
  195 + }]]>
  196 + </programlisting>
  197 + <calloutlist>
  198 + <callout arearefs="valid-desc">
  199 + <para>
  200 + No campo <literal>description</literal>, a anotação <literal>@NotNull</literal> serve
  201 + para impedir que o valor nulo seja atribuído a ele. Já a anotação <literal>@Size</literal>
  202 + restringe a quantidade mínima e máxima de caracteres no campo.
  203 + </para>
  204 + </callout>
  205 + <callout arearefs="valid-link">
  206 + <para>
  207 + No campo <literal>link</literal> mais restrições são aplicadas. Além de não permitir o valor
  208 + nulo (com <literal>@NotNull</literal>) e estipular o comprimento máximo de 255 caracteres
  209 + (com <literal>@Size</literal>), o campo não pode ficar vazio (com <literal>@NotBlank</literal>)
  210 + e seu conteúdo deve ser um endereço de Internet válido (com <literal>@URL</literal>).
  211 + </para>
  212 + </callout>
  213 + </calloutlist>
  214 + </programlistingco>
  215 + <tip>
  216 + <para>
  217 + Validações de campos específicos para a comunidade brasileira são oferecidos pelo componente
  218 + <emphasis>Demoiselle Validation</emphasis>. Com ele, as seguintes anotações podem ser aplicadas nas
  219 + classes de domínio: <literal>@Cep</literal>, <literal>@Cnpj</literal>, <literal>@Cpf</literal>,
  220 + <literal>@InscricaoEstadual</literal> e <literal>@PisPasep</literal>.
  221 + </para>
  222 + </tip>
520 <para> 223 <para>
521 - As mensagens exibidas na tela durante a validação estão contidas no arquivo de  
522 - recursos <filename>ValidationMessages.properties</filename> presente no diretório  
523 - <filename>/src/main/resources/</filename>. 224 + Assim que você efetuar as modificações, reconstrua o projeto Java e faça novo deploy no servidor de
  225 + aplicações. Acesse a aplicação <literal>bookmark</literal> e, na tela de edição de bookmarks, deixe
  226 + vazios os campos no formulário e clique em <guibutton>Salvar</guibutton>. Tente também preencher um
  227 + endereço de Internet inválido no campo <literal>Link</literal>. Caixas de erro com as mensagens
  228 + referentes as validações devem aparecer ao lado de cada campo, tal como ilustrado:
524 </para> 229 </para>
525 - </tip> 230 + <figure>
  231 + <title>Validação de campos na aplicação Bookmark</title>
  232 + <mediaobject>
  233 + <imageobject role="fo">
  234 + <imagedata fileref="images/appvalid.png" align="center" scalefit="1" />
  235 + </imageobject>
  236 + <imageobject role="html">
  237 + <imagedata fileref="images/appvalid.png" align="center" />
  238 + </imageobject>
  239 + <textobject>
  240 + <phrase>Aplicação Bookmark em funcionamento</phrase>
  241 + </textobject>
  242 + </mediaobject>
  243 + </figure>
  244 + <tip>
  245 + <para>
  246 + As mensagens exibidas na tela durante a validação estão contidas no arquivo de
  247 + recursos <filename>ValidationMessages.properties</filename> presente no diretório
  248 + <filename>/src/main/resources/</filename>.
  249 + </para>
  250 + </tip>
526 </section> 251 </section>
527 - 252 +
528 </chapter> 253 </chapter>
529 \ No newline at end of file 254 \ No newline at end of file
documentation/quickstart/pt-BR/preface.xml 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  3 + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
  4 + <preface>
  5 + <title>Sobre o QuickStart</title>
  6 + <para>
  7 + Este documento é um tutorial do tipo "passo a passo" que visa ilustrar de forma rápida, clara e prática a criação
  8 + de uma aplicação simples utilizando o <emphasis>Demoiselle Framework 2.3</emphasis>.
  9 + </para>
  10 + <note>
  11 + <para>
  12 + Apesar de o <emphasis>Demoiselle Framework 2.3</emphasis> ser simples de usar, o desenvolvimento de aplicações
  13 + não triviais requer o conhecimento das diversas tecnologias envolvidas na especificação
  14 + <emphasis>Java EE</emphasis>, incluindo:
  15 + <itemizedlist>
  16 + <listitem>Linguagem Java</listitem>
  17 + <listitem>Servlets, JSP e Tag Libraries</listitem>
  18 + <listitem>JavaBeans</listitem>
  19 + <listitem>HTML e XML</listitem>
  20 + <listitem>Contêineres e Servidores Web</listitem>
  21 + </itemizedlist>
  22 + </para>
  23 + </note>
  24 + <note>
  25 + <para>
  26 + Esta documentação refere-se à release 2.3 do <emphasis>Demoiselle Framework</emphasis> e pode diferir
  27 + significativamente das versões anteriores.
  28 + </para>
  29 + </note>
  30 + </preface>
0 \ No newline at end of file 31 \ No newline at end of file
documentation/reference/pt-BR/paginacao.xml
@@ -94,7 +94,7 @@ @@ -94,7 +94,7 @@
94 94
95 public Pagination getPagination(Class<?> clazz) { ... } 95 public Pagination getPagination(Class<?> clazz) { ... }
96 96
97 - public Pagination get -->Pagination(Class<?> clazz, boolean create) { ... } 97 + public Pagination getPagination(Class<?> clazz, boolean create) { ... }
98 98
99 } 99 }
100 100
@@ -173,7 +173,7 @@ @@ -173,7 +173,7 @@
173 <section> 173 <section>
174 <title>Implementação na aplicação</title> 174 <title>Implementação na aplicação</title>
175 <para> 175 <para>
176 - Veremos nessa seção como implementar a paginação em uma aplicação Java. Para esse exmplo tomamos como base a aplicação de Bookmarks 176 + Veremos nessa seção como implementar a paginação em uma aplicação Java. Para esse exemplo tomamos como base a aplicação de Bookmarks
177 fornecida pelo arquétipo <emphasis>JSF com JPA</emphasis> do <emphasis>Demoiselle Framework</emphasis> (para maiores detalhes 177 fornecida pelo arquétipo <emphasis>JSF com JPA</emphasis> do <emphasis>Demoiselle Framework</emphasis> (para maiores detalhes
178 ver <link linkend="estrutura">Arquétipos</link>). Iremos utilizar o componente <literal>DataTable</literal> do <emphasis>PrimeFaces</emphasis>, 178 ver <link linkend="estrutura">Arquétipos</link>). Iremos utilizar o componente <literal>DataTable</literal> do <emphasis>PrimeFaces</emphasis>,
179 que oferece o mecanismo de <emphasis>Lazy Loading</emphasis> conhecido como <literal>LazyDataModel</literal>, muito útil para paginação 179 que oferece o mecanismo de <emphasis>Lazy Loading</emphasis> conhecido como <literal>LazyDataModel</literal>, muito útil para paginação
@@ -181,7 +181,7 @@ @@ -181,7 +181,7 @@
181 </para> 181 </para>
182 <para> 182 <para>
183 Primeiro é preciso configurar um objeto <literal>LazyDataModel</literal> no construtor do <emphasis>Managed Bean</emphasis> 183 Primeiro é preciso configurar um objeto <literal>LazyDataModel</literal> no construtor do <emphasis>Managed Bean</emphasis>
184 - (<emphasis>BookmarkList</emphasis> nesse exemplo): instancia-lo e sobrescrever o método abstrado <literal>load</literal>, que recebe 184 + (<emphasis>BookmarkList</emphasis> nesse exemplo): instanciá-lo e sobrescrever o método abstrado <literal>load</literal>, que recebe
185 vários argumentos. Esses argumentos são recuperados na página <literal>jsf</literal> que carrega a instância do objeto <literal>LazyDataModel</literal>. 185 vários argumentos. Esses argumentos são recuperados na página <literal>jsf</literal> que carrega a instância do objeto <literal>LazyDataModel</literal>.
186 </para> 186 </para>
187 <para> 187 <para>
@@ -189,7 +189,7 @@ @@ -189,7 +189,7 @@
189 e ajustar alguns dos seus parâmetros para: indicar a partir de qual item a paginação deve iniciar, e o tamanho (quantidade de itens) de cada página. 189 e ajustar alguns dos seus parâmetros para: indicar a partir de qual item a paginação deve iniciar, e o tamanho (quantidade de itens) de cada página.
190 Esses dados são usados no método <literal>findAll()</literal>, da classe <literal>JPACrud</literal> (extensão JPA), que utiliza o contexto de 190 Esses dados são usados no método <literal>findAll()</literal>, da classe <literal>JPACrud</literal> (extensão JPA), que utiliza o contexto de
191 paginação para pegar os parametros e fazer a consulta no banco buscando apenas os itens que estão dentro da pagina que o parametro 191 paginação para pegar os parametros e fazer a consulta no banco buscando apenas os itens que estão dentro da pagina que o parametro
192 - <literal>first</literal> indicar. O resultado é passado para a instancia do <literal>LazyDataModel</literal>, que é responsável por exibir 192 + <literal>first</literal> indicar. O resultado é passado para a instância do <literal>LazyDataModel</literal>, que é responsável por exibir
193 os dados de forma apropriada. 193 os dados de forma apropriada.
194 </para> 194 </para>
195 <para> 195 <para>
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrapTest.java
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 // * GNU General Public License for more details. 14 // * GNU General Public License for more details.
15 // * 15 // *
16 // * You should have received a copy of the GNU Lesser General Public License version 3 16 // * You should have received a copy of the GNU Lesser General Public License version 3
17 -// * along with this program; if not, see <http://www.gnu.org/licenses/> 17 +// * along with this program; if not, see <http:www.gnu.org/licenses/>
18 // * or write to the Free Software Foundation, Inc., 51 Franklin Street, 18 // * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19 // * Fifth Floor, Boston, MA 02110-1301, USA. 19 // * Fifth Floor, Boston, MA 02110-1301, USA.
20 // * ---------------------------------------------------------------------------- 20 // * ----------------------------------------------------------------------------
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 // * para maiores detalhes. 30 // * para maiores detalhes.
31 // * 31 // *
32 // * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título 32 // * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33 -// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> 33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http:www.gnu.org/licenses/>
34 // * ou escreva para a Fundação do Software Livre (FSF) Inc., 34 // * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35 // * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. 35 // * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36 // */ 36 // */
impl/extension/servlet/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/HttpServletRequestProxyTest.java 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +package br.gov.frameworkdemoiselle.internal.proxy;
  2 +
  3 +import org.junit.runner.RunWith;
  4 +import org.powermock.modules.junit4.PowerMockRunner;
  5 +
  6 +@RunWith(PowerMockRunner.class)
  7 +public class HttpServletRequestProxyTest {
  8 +
  9 +
  10 +
  11 +}