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 | <?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<Bookmark, Long> { | @@ -393,141 +443,106 @@ public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { | ||
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]]></programlisting> | @@ -555,14 +570,6 @@ menu.bookmark=Bookmarks]]></programlisting> | ||
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]]></programlisting> | @@ -582,6 +589,24 @@ menu.bookmark=Bookmarks]]></programlisting> | ||
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
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 | <?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<Bookmark, Long, BookmarkDAO> { | @@ -410,119 +131,123 @@ public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { | ||
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 |
@@ -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