Commit d7c4460b6fe305d1fe4a5021093b9319fd7b57a7
Exists in
master
Merge branch 'master' of git@github.com:demoiselle/framework.git
Showing
14 changed files
with
715 additions
and
936 deletions
Show diff stats
documentation/quickstart/pt-BR/authorgroup.xml
1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
2 | 2 | <!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | 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 | 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 | 27 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/bookinfo.xml
1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
2 | 2 | <!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | 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 | 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 | 1 | <?xml version='1.0' encoding="utf-8"?> |
2 | 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
4 | -<chapter id="criacao"> | |
5 | 4 | |
5 | +<chapter id="criacao"> | |
6 | 6 | <title>Criação da aplicação</title> |
7 | - | |
8 | 7 | <section> |
9 | 8 | <title>Nossa primeira aplicação</title> |
10 | 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 | 11 | Java do tipo Web utilizando o <ulink url="http://maven.apache.org/"><citetitle>Apache Maven</citetitle></ulink>, |
13 | 12 | através do plugin para IDE Eclipse (M2Eclipse) para gerenciar todo o clico de vida do Projeto, |
14 | 13 | desde a criação até o <emphasis>deploy</emphasis>. |
... | ... | @@ -23,91 +22,57 @@ |
23 | 22 | |
24 | 23 | <section> |
25 | 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 | 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 | 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 | 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 | 76 | Ainda na tela criação do novo projeto, clique no botão <guibutton>Configure</guibutton> à direita do combo-box |
112 | 77 | <literal>Catalog</literal>, para que apareça a tela de configuração de arquétipos Maven no Eclipse. |
113 | 78 | </para> |
... | ... | @@ -132,8 +97,8 @@ mvn archetype:generate \ |
132 | 97 | </mediaobject> |
133 | 98 | <para> |
134 | 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 | 102 | <guibutton>Verify...</guibutton> para certificar-se que o conteúdo está correto. |
138 | 103 | Retorne então ao item anterior e siga as instruções. |
139 | 104 | </para> |
... | ... | @@ -154,87 +119,137 @@ mvn archetype:generate \ |
154 | 119 | Ao término do processo será criado o projeto <literal>bookmark</literal> gerenciado |
155 | 120 | pelo Maven e com a seguinte estrutura de diretórios: |
156 | 121 | </para> |
157 | - <programlisting><![CDATA[bookmark/ | |
122 | + <programlisting> | |
123 | +<![CDATA[bookmark/ | |
158 | 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 | 190 | <section> |
203 | - <title>Criando a entidade de domínio</title> | |
191 | + <title>Entidade de Domínio</title> | |
204 | 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 | 194 | <literal>Bookmark</literal>, a qual será responsável por representar um objeto de bookmark |
207 | 195 | a ser persistido no banco de dados usando JPA: |
208 | 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 | 253 | <para> |
239 | 254 | Os dois construtores da classe <literal>Bookmark</literal> serão utilizados posteriormente na aplicação. |
240 | 255 | As anotações <literal>@Entity</literal>, <literal>@Id</literal>, <literal>@GeneratedValue</literal> e |
... | ... | @@ -243,147 +258,182 @@ public class Bookmark { |
243 | 258 | </section> |
244 | 259 | |
245 | 260 | <section> |
246 | - <title>Implementando a camada de persistência</title> | |
261 | + <title>Camada de Persistência</title> | |
247 | 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 | 264 | <literal>BookmarkDAO</literal>, a qual será responsável por manipular os dados: |
250 | 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 | 277 | <para> |
259 | 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 | 280 | como controlador da camada de persistência na aplicação. |
262 | 281 | </para> |
263 | - </tip> | |
282 | + </note> | |
264 | 283 | <para> |
265 | 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 | 286 | o desenvolvedor não precisará implementar métodos de manipulação de uma entidade, tais como busca, |
268 | 287 | listagem, inclusão, alteração e exclusão de registros. Dessa forma, apenas métodos específicos do |
269 | 288 | caso de uso necessitam ser criados manualmente. |
270 | 289 | </para> |
271 | - <note> | |
290 | + <tip> | |
272 | 291 | <para> |
273 | 292 | Recomenda-se usar o sufixo <quote>DAO</quote> nessa classe para indicar que se trata de |
274 | 293 | um objeto de acesso a dados (i.e., um <emphasis>DAO - Data Access Object</emphasis>). |
275 | 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 | 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 | 302 | </para> |
306 | - <programlisting><![CDATA[frameworkdemoiselle.persistence.unit.name=bookmark-ds]]></programlisting> | |
307 | 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 | 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 | 326 | </section> |
323 | 327 | |
324 | 328 | <section> |
325 | - <title>Implementando a camada de negócio</title> | |
329 | + <title>Camada de Negócio</title> | |
326 | 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 | 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 | 361 | <para> |
355 | 362 | O método <function>startup()</function> nessa classe será invocado automaticamente durante a |
356 | 363 | inicialização da aplicação e fará com que a tabela seja populada com dados iniciais de bookmarks. |
357 | 364 | </para> |
358 | - <tip> | |
365 | + <note> | |
359 | 366 | <para> |
360 | 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 | 369 | como controlador da camada de negócio na aplicação. |
363 | 370 | </para> |
364 | - </tip> | |
371 | + </note> | |
365 | 372 | <para> |
366 | 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 | 375 | implementar métodos de negócio triviais de uma entidade e tampouco programar a injeção de dependência |
369 | 376 | entre as camadas de negócio e persistência. Tal injeção será realizada de forma implícita. |
370 | 377 | </para> |
371 | - <note> | |
378 | + <tip> | |
372 | 379 | <para> |
373 | 380 | Recomenda-se usar o sufixo <quote>BC</quote> nessa classe para indicar que se trata de |
374 | 381 | um controlador de negócio (i.e., um <emphasis>BC - Business Controller</emphasis>). |
375 | 382 | </para> |
376 | - </note> | |
383 | + </tip> | |
377 | 384 | </section> |
378 | 385 | |
379 | 386 | <section> |
380 | - <title>Implementando a camada de apresentação</title> | |
387 | + <title>Camada de Apresentação</title> | |
381 | 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 | 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 | 437 | public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { |
388 | 438 | |
389 | 439 | private static final long serialVersionUID = 1L; |
... | ... | @@ -393,141 +443,106 @@ public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { |
393 | 443 | |
394 | 444 | @Override |
395 | 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 | 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 | 477 | </para> |
413 | 478 | <para> |
414 | 479 | A anotação <literal>@Inject</literal> é fornecida pela especificação CDI. Ela realiza a injeção |
415 | 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 | 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 | 495 | <para> |
419 | 496 | Recomenda-se usar o sufixo <quote>MB</quote> nessa classe para indicar que se trata de |
420 | 497 | um bean gerenciado do JSF (i.e., um <emphasis>MB - Managed Bean</emphasis>). |
421 | 498 | </para> |
422 | - </note> | |
499 | + </tip> | |
423 | 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 | 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 | 517 | <para> |
463 | 518 | Nos arquivos XHTML listados neste exemplo foi empregado o framework |
464 | 519 | <ulink url="http://www.primefaces.org/">PrimeFaces</ulink>, o qual foi um dos primeiros a |
465 | 520 | oferecer suporte completo à especificação JSF 2.0. |
466 | 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 | 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 | 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 | 529 | <note> |
506 | 530 | <para> |
507 | 531 | O arquivo de recursos <filename>messages.properties</filename> armazenará textos |
508 | 532 | no idioma default da aplicação (neste caso, em Português do Brasil). |
509 | 533 | </para> |
510 | 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 | 535 | </section> |
520 | 536 | |
521 | 537 | <section> |
522 | 538 | <title>Executando no servidor</title> |
523 | 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 | 541 | </para> |
527 | 542 | <para> |
528 | 543 | Utilizando a IDE Eclipse, basta clicar com o botão direito no projeto <literal>bookmark</literal> e |
529 | 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 | 546 | </para> |
532 | 547 | <mediaobject> |
533 | 548 | <imageobject role="fo"> |
... | ... | @@ -555,14 +570,6 @@ menu.bookmark=Bookmarks]]></programlisting> |
555 | 570 | direito no servidor desejado e selecione a opção <guimenu>Debug</guimenu>. |
556 | 571 | </para> |
557 | 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 | 573 | <para> |
567 | 574 | Em seguida, abra o navegador Web de sua preferência e acesse o endereço |
568 | 575 | <ulink url="http://localhost:8080/bookmark">http://localhost:8080/bookmark</ulink>. Esta é a |
... | ... | @@ -582,6 +589,24 @@ menu.bookmark=Bookmarks]]></programlisting> |
582 | 589 | </textobject> |
583 | 590 | </mediaobject> |
584 | 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 | 610 | </section> |
586 | 611 | |
587 | 612 | </chapter> |
588 | 613 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/images/appedit.png
documentation/quickstart/pt-BR/images/apphome.png
documentation/quickstart/pt-BR/images/appvalid.png
documentation/quickstart/pt-BR/images/viewserver.png
documentation/quickstart/pt-BR/instalacao.xml
1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
2 | 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | 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 | 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 | 89 | Se você não utiliza nenhum dos sistemas operacionais citados, terá que baixar e instalar |
73 | 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 | 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 | 1 | <?xml version='1.0' encoding="utf-8"?> |
2 | 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
3 | 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 | 17 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/melhoria.xml
... | ... | @@ -6,359 +6,80 @@ |
6 | 6 | <title>Melhorando a aplicação</title> |
7 | 7 | |
8 | 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 | 9 | <title>Exibindo mensagens para o usuário</title> |
288 | 10 | <para> |
289 | 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 | 13 | iniciando pelo tratamento de mensagens. |
292 | 14 | </para> |
293 | 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 | 17 | <literal>InfoMessages</literal>, a qual servirá para armazenar mensagens informativas a serem |
296 | 18 | exibidas ao usuário: |
297 | 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 | 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 | 33 | </note> |
313 | 34 | <para> |
314 | 35 | No exemplo em questão, o texto das mensagens será recuperado do arquivo de recursos |
315 | 36 | <filename>messages.properties</filename> previamente criado no diretório |
316 | 37 | <filename>/src/main/resources/</filename>. Para isso, adicione as seguintes linhas nesse arquivo: |
317 | 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 | 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 | 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 | 46 | <literal>BookmarkBC</literal> incluindo os trechos de código indicados a seguir: |
324 | 47 | </para> |
325 | 48 | <programlistingco> |
326 | 49 | <areaspec> |
327 | 50 | <area id="inject-context" coords="5"/> |
328 | 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 | 55 | </areaset> |
333 | 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 | 83 | }]]></programlisting> |
363 | 84 | <calloutlist> |
364 | 85 | <callout arearefs="inject-context"> |
... | ... | @@ -410,119 +131,123 @@ public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { |
410 | 131 | </section> |
411 | 132 | |
412 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 251 | </section> |
527 | - | |
252 | + | |
528 | 253 | </chapter> |
529 | 254 | \ No newline at end of file | ... | ... |
... | ... | @@ -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 | 31 | \ No newline at end of file | ... | ... |
documentation/reference/pt-BR/paginacao.xml
... | ... | @@ -94,7 +94,7 @@ |
94 | 94 | |
95 | 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 | 173 | <section> |
174 | 174 | <title>Implementação na aplicação</title> |
175 | 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 | 177 | fornecida pelo arquétipo <emphasis>JSF com JPA</emphasis> do <emphasis>Demoiselle Framework</emphasis> (para maiores detalhes |
178 | 178 | ver <link linkend="estrutura">Arquétipos</link>). Iremos utilizar o componente <literal>DataTable</literal> do <emphasis>PrimeFaces</emphasis>, |
179 | 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 | 181 | </para> |
182 | 182 | <para> |
183 | 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 | 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 | 186 | </para> |
187 | 187 | <para> |
... | ... | @@ -189,7 +189,7 @@ |
189 | 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 | 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 | 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 | 193 | os dados de forma apropriada. |
194 | 194 | </para> |
195 | 195 | <para> | ... | ... |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrapTest.java
... | ... | @@ -14,7 +14,7 @@ |
14 | 14 | // * GNU General Public License for more details. |
15 | 15 | // * |
16 | 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 | 18 | // * or write to the Free Software Foundation, Inc., 51 Franklin Street, |
19 | 19 | // * Fifth Floor, Boston, MA 02110-1301, USA. |
20 | 20 | // * ---------------------------------------------------------------------------- |
... | ... | @@ -30,7 +30,7 @@ |
30 | 30 | // * para maiores detalhes. |
31 | 31 | // * |
32 | 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 | 34 | // * ou escreva para a Fundação do Software Livre (FSF) Inc., |
35 | 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