Commit 73c38d092a2aaa92f1bb78b9e8bae9219beb7ecf
1 parent
bd05cf21
Exists in
master
Atualização para ficar aderente à versão 2.3
Showing
13 changed files
with
711 additions
and
932 deletions
Show diff stats
documentation/quickstart/pt-BR/authorgroup.xml
| 1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
| 2 | 2 | <!DOCTYPE authorgroup PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| 3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
| 4 | -<authorgroup> | |
| 5 | - <author> | |
| 6 | - <firstname>Emerson</firstname> | |
| 7 | - <surname>Saito</surname> | |
| 8 | - </author> | |
| 9 | - <author> | |
| 10 | - <firstname>Marlon</firstname> | |
| 11 | - <surname>Carvalho</surname> | |
| 12 | - </author> | |
| 13 | - <author> | |
| 14 | - <firstname>Rodrigo</firstname> | |
| 15 | - <surname>Hjort</surname> | |
| 16 | - </author> | |
| 17 | - <author> | |
| 18 | - <firstname>Serge</firstname> | |
| 19 | - <surname>Rehem</surname> | |
| 20 | - </author> | |
| 21 | -</authorgroup> | |
| 22 | 4 | \ No newline at end of file |
| 5 | + <authorgroup> | |
| 6 | + <author> | |
| 7 | + <firstname>Emerson</firstname> | |
| 8 | + <surname>Saito</surname> | |
| 9 | + </author> | |
| 10 | + <author> | |
| 11 | + <firstname>Luciano</firstname> | |
| 12 | + <surname>Borges</surname> | |
| 13 | + </author> | |
| 14 | + <author> | |
| 15 | + <firstname>Marlon</firstname> | |
| 16 | + <surname>Carvalho</surname> | |
| 17 | + </author> | |
| 18 | + <author> | |
| 19 | + <firstname>Rodrigo</firstname> | |
| 20 | + <surname>Hjort</surname> | |
| 21 | + </author> | |
| 22 | + <author> | |
| 23 | + <firstname>Serge</firstname> | |
| 24 | + <surname>Rehem</surname> | |
| 25 | + </author> | |
| 26 | + </authorgroup> | |
| 23 | 27 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/bookinfo.xml
| 1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
| 2 | 2 | <!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| 3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
| 4 | -<bookinfo> | |
| 5 | - | |
| 6 | - <title>Framework Demoiselle 2.0</title> | |
| 7 | - <subtitle>QuickStart</subtitle> | |
| 8 | - | |
| 9 | - <abstract>Demoiselle 2.0: Framework de Código Aberto para o Desenvolvimento de Aplicações Java EE 6</abstract> | |
| 10 | - <titleabbrev>Demoiselle 2.0 - QuickStart</titleabbrev> | |
| 11 | - | |
| 12 | - <xi:include href="revhistory.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 13 | - <xi:include href="authorgroup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 14 | - | |
| 15 | -</bookinfo> | |
| 16 | 4 | \ No newline at end of file |
| 5 | + <bookinfo> | |
| 6 | + <title>Framework Demoiselle 2.3</title> | |
| 7 | + <subtitle>QuickStart</subtitle> | |
| 8 | + <xi:include href="authorgroup.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 9 | + </bookinfo> | ... | ... |
documentation/quickstart/pt-BR/criacao.xml
| 1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
| 2 | 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| 3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
| 4 | -<chapter id="criacao"> | |
| 5 | 4 | |
| 5 | +<chapter id="criacao"> | |
| 6 | 6 | <title>Criação da aplicação</title> |
| 7 | - | |
| 8 | 7 | <section> |
| 9 | 8 | <title>Nossa primeira aplicação</title> |
| 10 | 9 | <para> |
| 11 | - Para iniciar o uso do <emphasis>Demoiselle Framework 2.X</emphasis>, criaremos uma aplicação | |
| 10 | + Para iniciar o uso do <emphasis>Demoiselle Framework 2.3</emphasis>, criaremos uma aplicação | |
| 12 | 11 | Java do tipo Web utilizando o <ulink url="http://maven.apache.org/"><citetitle>Apache Maven</citetitle></ulink>, |
| 13 | 12 | através do plugin para IDE Eclipse (M2Eclipse) para gerenciar todo o clico de vida do Projeto, |
| 14 | 13 | desde a criação até o <emphasis>deploy</emphasis>. |
| ... | ... | @@ -23,91 +22,57 @@ |
| 23 | 22 | |
| 24 | 23 | <section> |
| 25 | 24 | <title>Construindo o projeto usando um arquétipo Maven</title> |
| 26 | - <important> | |
| 27 | - <para> | |
| 28 | - O procedimento a seguir pode ser comumente executado de forma visual com o auxílio de um | |
| 29 | - assistente (i.e., wizard) de dentro da IDE Eclipse, como será demonstrado logo após o modo linha de comando. | |
| 30 | - </para> | |
| 31 | - </important> | |
| 32 | - <section> | |
| 33 | - <title>Linha de comando</title> | |
| 34 | - <para> | |
| 35 | - Para criar a aplicação usando o arquétipo em linha de comando, abra um terminal e execute o comando <command>mvn</command> | |
| 36 | - do Maven com os argumentos ilustrados a seguir: | |
| 37 | - </para> | |
| 38 | - <programlisting role="BASH"><![CDATA[mvn archetype:generate \ | |
| 39 | - -DarchetypeGroupId=br.gov.frameworkdemoiselle.archetypes \ | |
| 40 | - -DarchetypeArtifactId=demoiselle-jsf-jpa \ | |
| 41 | - -DarchetypeVersion=2.2.0 \ | |
| 42 | - -DarchetypeRepository=http://demoiselle.sourceforge.net/repository/release/ \ | |
| 43 | - -DgroupId=br.gov.frameworkdemoiselle.sample \ | |
| 44 | - -DartifactId=bookmark \ | |
| 45 | - -Dversion=1.0.0-SNAPSHOT \ | |
| 46 | - -DinteractiveMode=false]]></programlisting> | |
| 47 | -<!-- para testar locamente: | |
| 48 | -mvn archetype:generate \ | |
| 49 | - -DarchetypeGroupId=br.gov.frameworkdemoiselle.archetypes \ | |
| 50 | - -DarchetypeArtifactId=demoiselle-jsf-jpa \ | |
| 51 | - -DarchetypeVersion=2.0.0-RC1-SNAPSHOT \ | |
| 52 | - -DgroupId=br.gov.frameworkdemoiselle.sample \ | |
| 53 | - -DartifactId=bookmark \ | |
| 54 | - -Dversion=1.0.0-SNAPSHOT \ | |
| 55 | - -DinteractiveMode=false | |
| 56 | - --> | |
| 57 | - </section> | |
| 58 | - <section> | |
| 59 | - <title>Modo assistido com Eclipse</title> | |
| 25 | + <para> | |
| 26 | + Para criar esse projeto utilizando a IDE Eclipse, acesse o menu <guimenu>File</guimenu>, | |
| 27 | + <guimenu>New</guimenu>, <guimenu>Other...</guimenu> digite e selecione <guimenu>Maven Project</guimenu>: | |
| 28 | + conforme mostrado na figura abaixo: | |
| 29 | + <mediaobject> | |
| 30 | + <imageobject role="fo"> | |
| 31 | + <imagedata fileref="images/newwiz.png" align="center" scalefit="1" width="75%"/> | |
| 32 | + </imageobject> | |
| 33 | + <imageobject role="html"> | |
| 34 | + <imagedata fileref="images/newwiz.png" align="center"/> | |
| 35 | + </imageobject> | |
| 36 | + </mediaobject> | |
| 37 | + </para> | |
| 38 | + <para> | |
| 39 | + Na tela seguinte, recomenda-se manter os valores "default": | |
| 40 | + <mediaobject> | |
| 41 | + <imageobject role="fo"> | |
| 42 | + <imagedata fileref="images/new-maven-project01.png" align="center" scalefit="1" width="75%"/> | |
| 43 | + </imageobject> | |
| 44 | + <imageobject role="html"> | |
| 45 | + <imagedata fileref="images/new-maven-project01.png" align="center"/> | |
| 46 | + </imageobject> | |
| 47 | + </mediaobject> | |
| 48 | + </para> | |
| 49 | + <para> | |
| 50 | + Na tela abaixo, no combo-box chamado <literal>Catalog</literal>, selecione o item com o nome <quote>Demoiselle</quote> e | |
| 51 | + no campo <literal>Filter</literal> digite <quote>JSF</quote> e em seguida selecione o item <quote>demoiselle-jsf-jpa</quote>: | |
| 52 | + <mediaobject> | |
| 53 | + <imageobject role="fo"> | |
| 54 | + <imagedata fileref="images/new-maven-project02.png" align="center" scalefit="1" width="75%"/> | |
| 55 | + </imageobject> | |
| 56 | + <imageobject role="html"> | |
| 57 | + <imagedata fileref="images/new-maven-project02.png" align="center"/> | |
| 58 | + </imageobject> | |
| 59 | + </mediaobject> | |
| 60 | + </para> | |
| 61 | + <caution> | |
| 60 | 62 | <para> |
| 61 | - Para criar esse projeto utilizando a IDE Eclipse, acesse o menu <guimenu>File</guimenu>, | |
| 62 | - <guimenu>New</guimenu>, <guimenu>Other...</guimenu> digite e selecione <guimenu>Maven Project</guimenu>: | |
| 63 | - conforme mostrado na figura abaixo: | |
| 64 | - <mediaobject> | |
| 65 | - <imageobject role="fo"> | |
| 66 | - <imagedata fileref="images/newwiz.png" align="center" scalefit="1" width="75%"/> | |
| 67 | - </imageobject> | |
| 68 | - <imageobject role="html"> | |
| 69 | - <imagedata fileref="images/newwiz.png" align="center"/> | |
| 70 | - </imageobject> | |
| 71 | - </mediaobject> | |
| 72 | - </para> | |
| 73 | - <para> | |
| 74 | - Na tela seguinte, recomenda-se manter os valores "default": | |
| 75 | - <mediaobject> | |
| 76 | - <imageobject role="fo"> | |
| 77 | - <imagedata fileref="images/new-maven-project01.png" align="center" scalefit="1" width="75%"/> | |
| 78 | - </imageobject> | |
| 79 | - <imageobject role="html"> | |
| 80 | - <imagedata fileref="images/new-maven-project01.png" align="center"/> | |
| 81 | - </imageobject> | |
| 82 | - </mediaobject> | |
| 63 | + Se as opções anteriores não aparecem, é porque será necessário incluir o catálogo remoto de arquétipos Maven do Demoiselle. | |
| 64 | + Caso contrário pule o subitem <emphasis>Incluindo catálogo remoto</emphasis> e siga as demais instruções. | |
| 83 | 65 | </para> |
| 84 | - <para> | |
| 85 | - Na tela abaixo, no combo-box chamado <literal>Catalog</literal>, selecione o item com o nome <quote>Demoiselle</quote> e | |
| 86 | - no campo <literal>Filter</literal> digite <quote>JSF</quote> e em seguida selecione o item <quote>demoiselle-jsf-jpa</quote>: | |
| 87 | - <mediaobject> | |
| 88 | - <imageobject role="fo"> | |
| 89 | - <imagedata fileref="images/new-maven-project02.png" align="center" scalefit="1" width="75%"/> | |
| 90 | - </imageobject> | |
| 91 | - <imageobject role="html"> | |
| 92 | - <imagedata fileref="images/new-maven-project02.png" align="center"/> | |
| 93 | - </imageobject> | |
| 94 | - </mediaobject> | |
| 66 | + </caution> | |
| 67 | + <caution> | |
| 68 | + <para> | |
| 69 | + A versão do arquétipo irá variar conforme surjam novas versões do Demoiselle. A imagem deste guia apresenta a versão 2.3, contudo, | |
| 70 | + fique sempre atento para as novas versões do Demoiselle em nosso site e sempre utilize a versão do arquétipo mais recente. | |
| 95 | 71 | </para> |
| 96 | - <caution> | |
| 97 | - <para> | |
| 98 | - Se as opções anteriores não aparecem, é porque será necessário incluir o catálogo remoto de arquétipos Maven do Demoiselle. | |
| 99 | - Caso contrário pule o subitem <emphasis>Incluindo catálogo remoto</emphasis> e siga as demais instruções. | |
| 100 | - </para> | |
| 101 | - </caution> | |
| 102 | - <caution> | |
| 103 | - <para> | |
| 104 | - A versão do arquétipo irá variar conforme surjam novas versões do Demoiselle. A imagem deste guia apresenta a versão 2.0.0, contudo, | |
| 105 | - fique sempre atento para as novas versões do Demoiselle em nosso site e sempre utilize a versão do arquétipo mais recente. | |
| 106 | - </para> | |
| 107 | - </caution> | |
| 108 | - <section> | |
| 109 | - <title>Incluindo catálogo remoto</title> | |
| 110 | - <para> | |
| 72 | + </caution> | |
| 73 | + <section> | |
| 74 | + <title>Incluindo catálogo remoto</title> | |
| 75 | + <para> | |
| 111 | 76 | Ainda na tela criação do novo projeto, clique no botão <guibutton>Configure</guibutton> à direita do combo-box |
| 112 | 77 | <literal>Catalog</literal>, para que apareça a tela de configuração de arquétipos Maven no Eclipse. |
| 113 | 78 | </para> |
| ... | ... | @@ -132,8 +97,8 @@ mvn archetype:generate \ |
| 132 | 97 | </mediaobject> |
| 133 | 98 | <para> |
| 134 | 99 | Na campo <literal>Catalog File</literal> coloque este conteúdo: |
| 135 | - <literal>http://demoiselle.sourceforge.net/repository/archetype-catalog.xml</literal>. | |
| 136 | - No campo <literal>Description</literal> informe: <quote>Demoiselle</quote>. Em seguida, clique no botão | |
| 100 | + <literal>https://oss.sonatype.org/content/repositories/releases</literal>. | |
| 101 | + No campo <literal>Description</literal> informe: <quote>Nexus</quote>. Em seguida, clique no botão | |
| 137 | 102 | <guibutton>Verify...</guibutton> para certificar-se que o conteúdo está correto. |
| 138 | 103 | Retorne então ao item anterior e siga as instruções. |
| 139 | 104 | </para> |
| ... | ... | @@ -154,87 +119,137 @@ mvn archetype:generate \ |
| 154 | 119 | Ao término do processo será criado o projeto <literal>bookmark</literal> gerenciado |
| 155 | 120 | pelo Maven e com a seguinte estrutura de diretórios: |
| 156 | 121 | </para> |
| 157 | - <programlisting><![CDATA[bookmark/ | |
| 122 | + <programlisting> | |
| 123 | +<![CDATA[bookmark/ | |
| 158 | 124 | |-- pom.xml |
| 159 | -`-- src | |
| 160 | - |-- main | |
| 161 | - | |-- java | |
| 162 | - | | `-- br | |
| 163 | - | | `-- gov | |
| 164 | - | | `-- frameworkdemoiselle | |
| 165 | - | | `-- sample | |
| 166 | - | | |-- business | |
| 167 | - | | |-- constant | |
| 168 | - | | |-- domain | |
| 169 | - | | |-- exception | |
| 170 | - | | |-- message | |
| 171 | - | | |-- persistence | |
| 172 | - | | |-- util | |
| 173 | - | | `-- view | |
| 174 | - | |-- resources | |
| 175 | - | | |-- demoiselle.properties | |
| 176 | - | | |-- log4j.properties | |
| 177 | - | | |-- messages.properties | |
| 178 | - | | |-- META-INF | |
| 179 | - | | | |-- beans.xml | |
| 180 | - | | | `-- persistence.xml | |
| 181 | - | | `-- ValidationMessages.properties | |
| 182 | - | `-- webapp | |
| 183 | - | |-- home.xhtml | |
| 184 | - | |-- images | |
| 185 | - | | `-- logo.png | |
| 186 | - | |-- index.html | |
| 187 | - | |-- menu.xhtml | |
| 188 | - | |-- template | |
| 189 | - | | `-- main.xhtml | |
| 190 | - | `-- WEB-INF | |
| 191 | - | |-- faces-config.xml | |
| 192 | - | `-- web.xml | |
| 193 | - `-- test | |
| 194 | - |-- java | |
| 195 | - | `-- br | |
| 196 | - | `-- gov | |
| 197 | - | `-- frameworkdemoiselle | |
| 198 | - | `-- sample | |
| 199 | - `-- resources]]></programlisting> | |
| 200 | - </section> | |
| 125 | +|-- src | |
| 126 | +| |-- main | |
| 127 | +| | |-- java | |
| 128 | +| | | |-- br | |
| 129 | +| | | |-- gov | |
| 130 | +| | | |-- frameworkdemoiselle | |
| 131 | +| | | |-- sample | |
| 132 | +| | | |-- bookmark | |
| 133 | +| | | |-- business | |
| 134 | +| | | | |-- BookmarkBC.java | |
| 135 | +| | | |-- constant | |
| 136 | +| | | | |-- readme.txt | |
| 137 | +| | | |-- domain | |
| 138 | +| | | | |-- Bookmark.java | |
| 139 | +| | | |-- exception | |
| 140 | +| | | | |-- readme.txt | |
| 141 | +| | | |-- message | |
| 142 | +| | | | |-- readme.txt | |
| 143 | +| | | |-- persistence | |
| 144 | +| | | | |-- BookmarkDAO.java | |
| 145 | +| | | |-- util | |
| 146 | +| | | | |-- readme.txt | |
| 147 | +| | | |-- view | |
| 148 | +| | | |-- BookmarkEditMB.java | |
| 149 | +| | | |-- BookmarkListMB.java | |
| 150 | +| | |-- resources | |
| 151 | +| | | |-- demoiselle.properties | |
| 152 | +| | | |-- log4j.properties | |
| 153 | +| | | |-- messages.properties | |
| 154 | +| | | |-- META-INF | |
| 155 | +| | | | |-- beans.xml | |
| 156 | +| | | | |-- persistence.xml | |
| 157 | +| | | |-- ValidationMessages.properties | |
| 158 | +| | |-- webapp | |
| 159 | +| | |-- bookmark_edit.xhtml | |
| 160 | +| | |-- bookmark_list.xhtml | |
| 161 | +| | |-- images | |
| 162 | +| | | |-- logo.png | |
| 163 | +| | |-- index.html | |
| 164 | +| | |-- index.xhtml | |
| 165 | +| | |-- menu.xhtml | |
| 166 | +| | |-- template | |
| 167 | +| | | |-- main.xhtml | |
| 168 | +| | |-- WEB-INF | |
| 169 | +| | |-- beans.xml | |
| 170 | +| | |-- faces-config.xml | |
| 171 | +| | |-- lib | |
| 172 | +| | |-- web.xml | |
| 173 | +| |-- test | |
| 174 | +| |-- java | |
| 175 | +| | |-- br | |
| 176 | +| | |-- gov | |
| 177 | +| | |-- frameworkdemoiselle | |
| 178 | +| | |-- sample | |
| 179 | +| | |-- bookmark | |
| 180 | +| | |-- business | |
| 181 | +| | |-- BookmarkBCTest.java | |
| 182 | +| |-- resources | |
| 183 | +| |-- demoiselle.properties | |
| 184 | +| |-- META-INF | |
| 185 | +| |-- beans.xml | |
| 186 | +| |-- persistence.xml]]> | |
| 187 | + </programlisting> | |
| 188 | + | |
| 201 | 189 | |
| 202 | 190 | <section> |
| 203 | - <title>Criando a entidade de domínio</title> | |
| 191 | + <title>Entidade de Domínio</title> | |
| 204 | 192 | <para> |
| 205 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.domain</literal> crie a classe | |
| 193 | + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.domain</literal> foi criada a classe | |
| 206 | 194 | <literal>Bookmark</literal>, a qual será responsável por representar um objeto de bookmark |
| 207 | 195 | a ser persistido no banco de dados usando JPA: |
| 208 | 196 | </para> |
| 209 | - <programlisting role="JAVA"><![CDATA[@Entity | |
| 210 | -public class Bookmark { | |
| 211 | - | |
| 212 | - @Id | |
| 213 | - @GeneratedValue | |
| 214 | - private Long id; | |
| 215 | - | |
| 216 | - @Column | |
| 217 | - private String description; | |
| 218 | - | |
| 219 | - @Column | |
| 220 | - private String link; | |
| 221 | - | |
| 222 | - public Bookmark() { | |
| 223 | - super(); | |
| 224 | - } | |
| 225 | - | |
| 226 | - public Bookmark(String description, String link) { | |
| 227 | - this.description = description; | |
| 228 | - this.link = link; | |
| 229 | - } | |
| 230 | - | |
| 231 | -}]]></programlisting> | |
| 232 | - <note> | |
| 233 | - <para> | |
| 234 | - Lembre-se de criar os respectivos métodos <emphasis>getter</emphasis> e | |
| 235 | - <emphasis>setter</emphasis> para as propriedades dessa classe. | |
| 236 | - </para> | |
| 237 | - </note> | |
| 197 | + <programlisting role="JAVA"> | |
| 198 | + <![CDATA[ | |
| 199 | + @Entity | |
| 200 | + public class Bookmark implements Serializable { | |
| 201 | + | |
| 202 | + private static final long serialVersionUID = 1L; | |
| 203 | + | |
| 204 | + /* | |
| 205 | + * If you are using Glassfish then remove the strategy attribute | |
| 206 | + */ | |
| 207 | + @Id | |
| 208 | + @GeneratedValue(strategy = SEQUENCE) | |
| 209 | + private Long id; | |
| 210 | + | |
| 211 | + @Column | |
| 212 | + private String description; | |
| 213 | + | |
| 214 | + @Column | |
| 215 | + private String link; | |
| 216 | + | |
| 217 | + public Bookmark() { | |
| 218 | + super(); | |
| 219 | + } | |
| 220 | + | |
| 221 | + public Bookmark(String description, String link) { | |
| 222 | + this.description = description; | |
| 223 | + this.link = link; | |
| 224 | + } | |
| 225 | + | |
| 226 | + public Long getId() { | |
| 227 | + return id; | |
| 228 | + } | |
| 229 | + | |
| 230 | + public void setId(Long id) { | |
| 231 | + this.id = id; | |
| 232 | + } | |
| 233 | + | |
| 234 | + public String getDescription() { | |
| 235 | + return description; | |
| 236 | + } | |
| 237 | + | |
| 238 | + public void setDescription(String description) { | |
| 239 | + this.description = description; | |
| 240 | + } | |
| 241 | + | |
| 242 | + public String getLink() { | |
| 243 | + return link; | |
| 244 | + } | |
| 245 | + | |
| 246 | + public void setLink(String link) { | |
| 247 | + this.link = link; | |
| 248 | + } | |
| 249 | + | |
| 250 | + } | |
| 251 | + ]]> | |
| 252 | + </programlisting> | |
| 238 | 253 | <para> |
| 239 | 254 | Os dois construtores da classe <literal>Bookmark</literal> serão utilizados posteriormente na aplicação. |
| 240 | 255 | As anotações <literal>@Entity</literal>, <literal>@Id</literal>, <literal>@GeneratedValue</literal> e |
| ... | ... | @@ -243,147 +258,182 @@ public class Bookmark { |
| 243 | 258 | </section> |
| 244 | 259 | |
| 245 | 260 | <section> |
| 246 | - <title>Implementando a camada de persistência</title> | |
| 261 | + <title>Camada de Persistência</title> | |
| 247 | 262 | <para> |
| 248 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.persistence</literal> crie a classe | |
| 263 | + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.persistence</literal> foi criada a classe | |
| 249 | 264 | <literal>BookmarkDAO</literal>, a qual será responsável por manipular os dados: |
| 250 | 265 | </para> |
| 251 | - <programlisting role="JAVA"><![CDATA[@PersistenceController | |
| 252 | -public class BookmarkDAO extends JPACrud<Bookmark, Long> { | |
| 253 | - | |
| 254 | - private static final long serialVersionUID = 1L; | |
| 255 | - | |
| 256 | -}]]></programlisting> | |
| 257 | - <tip> | |
| 266 | + <programlisting role="JAVA"> | |
| 267 | + <![CDATA[ | |
| 268 | + @PersistenceController | |
| 269 | + public class BookmarkDAO extends JPACrud<Bookmark, Long> { | |
| 270 | + | |
| 271 | + private static final long serialVersionUID = 1L; | |
| 272 | + | |
| 273 | + } | |
| 274 | + ]]> | |
| 275 | + </programlisting> | |
| 276 | + <note> | |
| 258 | 277 | <para> |
| 259 | 278 | A anotação <literal>@PersistenceController</literal> trata-se de um estereótipo fornecido |
| 260 | - pelo <emphasis>Demoiselle Framework 2.X</emphasis> para indicar que uma classe será tratada | |
| 279 | + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada | |
| 261 | 280 | como controlador da camada de persistência na aplicação. |
| 262 | 281 | </para> |
| 263 | - </tip> | |
| 282 | + </note> | |
| 264 | 283 | <para> |
| 265 | 284 | A classe abstrata <literal>JPACrud</literal> faz parte do código de suporte fornecido pelo |
| 266 | - <emphasis>Demoiselle Framework 2.X</emphasis> (especificamente na extensão JPA). Ao utilizá-la, | |
| 285 | + <emphasis>Demoiselle Framework 2</emphasis> (especificamente na extensão JPA). Ao utilizá-la, | |
| 267 | 286 | o desenvolvedor não precisará implementar métodos de manipulação de uma entidade, tais como busca, |
| 268 | 287 | listagem, inclusão, alteração e exclusão de registros. Dessa forma, apenas métodos específicos do |
| 269 | 288 | caso de uso necessitam ser criados manualmente. |
| 270 | 289 | </para> |
| 271 | - <note> | |
| 290 | + <tip> | |
| 272 | 291 | <para> |
| 273 | 292 | Recomenda-se usar o sufixo <quote>DAO</quote> nessa classe para indicar que se trata de |
| 274 | 293 | um objeto de acesso a dados (i.e., um <emphasis>DAO - Data Access Object</emphasis>). |
| 275 | 294 | </para> |
| 276 | - </note> | |
| 277 | - <para> | |
| 278 | - No diretório <filename>/src/main/resources/META-INF/</filename>, altere o arquivo | |
| 279 | - <filename>persistence.xml</filename> com o conteúdo seguinte: | |
| 280 | - </para> | |
| 281 | - <programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> | |
| 282 | - <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" | |
| 283 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| 284 | - xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> | |
| 285 | - <persistence-unit name="bookmark-ds"> | |
| 286 | - <jta-data-source>java:/DefaultDS</jta-data-source> | |
| 287 | - <class>br.gov.frameworkdemoiselle.sample.domain.Bookmark</class> | |
| 288 | - <properties> | |
| 289 | - <property name="hibernate.show_sql" value="true" /> | |
| 290 | - <property name="hibernate.format_sql" value="false" /> | |
| 291 | - <property name="hibernate.hbm2ddl.auto" value="update" /> | |
| 292 | - <property name="hibernate.transaction.factory_class" | |
| 293 | - value="org.hibernate.transaction.JTATransactionFactory" /> | |
| 294 | - <property name="jta.UserTransaction" value="UserTransaction" /> | |
| 295 | - </properties> | |
| 296 | - </persistence-unit> | |
| 297 | - </persistence>]]></programlisting> | |
| 298 | - <para> | |
| 299 | - Este arquivo armazenará as configurações de acesso ao banco de dados via JPA. Neste caso, o gerenciamento das conexões | |
| 300 | - ficará a cargo do servidor de aplicações (ex: JBoss AS). Será usada a fonte de dados <literal>java:/DefaultDS</literal>. | |
| 301 | - </para> | |
| 295 | + </tip> | |
| 302 | 296 | <para> |
| 303 | - No diretório <filename>/src/main/resources/</filename>, altere o arquivo | |
| 304 | - <filename>demoiselle.properties</filename> com o conteúdo seguinte: | |
| 297 | + No diretório <filename>/src/main/resources/META-INF/</filename> foi criado o arquivo <filename>persistence.xml</filename> | |
| 298 | + utilizado para armazenar as configurações de acesso ao banco de dados via JPA (conexões controladas por um <literal>JPA Provider</literal>, ex: Hibernate) | |
| 299 | + ou JTA (conexões controladas pelo <literal>Application Server</literal>, ex: JBossAS) e como pode ser observado o <emphasis>Demoiselle Framework 2</emphasis> | |
| 300 | + já traz neste arquivo vários exemplos de configurações para os mais distintos <literal>Application Servers</literal>, como: | |
| 301 | + JBoss AS7, JBoss AS6, GlassFish 3, Tomcat 6 e Tomcat7. | |
| 305 | 302 | </para> |
| 306 | - <programlisting><![CDATA[frameworkdemoiselle.persistence.unit.name=bookmark-ds]]></programlisting> | |
| 307 | 303 | <para> |
| 308 | - No diretório <filename>/src/main/resources/META-INF/</filename>, altere o arquivo | |
| 309 | - <filename>beans.xml</filename> com o conteúdo seguinte: | |
| 304 | + O projeto criado pelo arquétipo <quote>demoiselle-jsf-jpa</quote> já vem configurado para usar conexão JPA com o HSQLDB, conforme código abaixo: | |
| 310 | 305 | </para> |
| 311 | - <programlisting role="XML"><![CDATA[<?xml version="1.0"?> | |
| 312 | -<beans xmlns="http://java.sun.com/xml/ns/javaee" | |
| 313 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| 314 | - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee | |
| 315 | - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"> | |
| 306 | + <programlisting role="XML"> | |
| 307 | + <![CDATA[ | |
| 308 | + <?xml version="1.0" encoding="UTF-8"?> | |
| 309 | + <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| 310 | + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> | |
| 316 | 311 | |
| 317 | - <alternatives> | |
| 318 | - <class>br.gov.frameworkdemoiselle.transaction.JTATransaction</class> | |
| 319 | - </alternatives> | |
| 312 | + <persistence-unit name="bookmark-ds" transaction-type="RESOURCE_LOCAL"> | |
| 313 | + <non-jta-data-source>java:jboss/datasources/ExampleDS</non-jta-data-source> | |
| 314 | + | |
| 315 | + <class>br.gov.frameworkdemoiselle.sample.bookmark.domain.Bookmark</class> | |
| 320 | 316 | |
| 321 | -</beans>]]></programlisting> | |
| 317 | + <properties> | |
| 318 | + <property name="hibernate.show_sql" value="true" /> | |
| 319 | + <property name="hibernate.format_sql" value="false" /> | |
| 320 | + <property name="hibernate.hbm2ddl.auto" value="create-drop" /> | |
| 321 | + </properties> | |
| 322 | + </persistence-unit> | |
| 323 | + </persistence> | |
| 324 | + ]]> | |
| 325 | + </programlisting> | |
| 322 | 326 | </section> |
| 323 | 327 | |
| 324 | 328 | <section> |
| 325 | - <title>Implementando a camada de negócio</title> | |
| 329 | + <title>Camada de Negócio</title> | |
| 326 | 330 | <para> |
| 327 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.business</literal> crie a classe | |
| 328 | - <literal>BookmarkBC</literal>, a qual será responsável por gerenciar as regras de negócio | |
| 329 | - referentes aos bookmarks: | |
| 331 | + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.business</literal> foi criada a classe | |
| 332 | + <literal>BookmarkBC</literal>, a qual será responsável por gerenciar as regras de negócio referentes aos bookmarks: | |
| 330 | 333 | </para> |
| 331 | - <programlisting role="JAVA"><![CDATA[@BusinessController | |
| 332 | -public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { | |
| 333 | - | |
| 334 | - private static final long serialVersionUID = 1L; | |
| 335 | - | |
| 336 | - @Startup | |
| 337 | - @Transactional | |
| 338 | - public void startup() { | |
| 339 | - if (findAll().isEmpty()) { | |
| 340 | - insert(new Bookmark("Demoiselle Portal", "http://www.frameworkdemoiselle.gov.br")); | |
| 341 | - insert(new Bookmark("Demoiselle SourceForge", "http://sf.net/projects/demoiselle")); | |
| 342 | - insert(new Bookmark("Twitter", "http://twitter.frameworkdemoiselle.gov.br")); | |
| 343 | - insert(new Bookmark("Blog", "http://blog.frameworkdemoiselle.gov.br")); | |
| 344 | - insert(new Bookmark("Wiki", "http://wiki.frameworkdemoiselle.gov.br")); | |
| 345 | - insert(new Bookmark("Bug Tracking", "http://tracker.frameworkdemoiselle.gov.br")); | |
| 346 | - insert(new Bookmark("Forum", "http://forum.frameworkdemoiselle.gov.br")); | |
| 347 | - insert(new Bookmark("SVN", "http://svn.frameworkdemoiselle.gov.br")); | |
| 348 | - insert(new Bookmark("Maven", "http://repository.frameworkdemoiselle.gov.br")); | |
| 349 | - insert(new Bookmark("Downloads", "http://download.frameworkdemoiselle.gov.br")); | |
| 350 | - } | |
| 351 | - } | |
| 352 | - | |
| 353 | -}]]></programlisting> | |
| 334 | + <programlisting role="JAVA"> | |
| 335 | + <![CDATA[ | |
| 336 | + @BusinessController | |
| 337 | + public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { | |
| 338 | + | |
| 339 | + private static final long serialVersionUID = 1L; | |
| 340 | + | |
| 341 | + @Startup | |
| 342 | + @Transactional | |
| 343 | + public void load() { | |
| 344 | + if (findAll().isEmpty()) { | |
| 345 | + insert(new Bookmark("Demoiselle Portal", "http://www.frameworkdemoiselle.gov.br")); | |
| 346 | + insert(new Bookmark("Demoiselle SourceForge", "http://sf.net/projects/demoiselle")); | |
| 347 | + insert(new Bookmark("Twitter", "http://twitter.frameworkdemoiselle.gov.br")); | |
| 348 | + insert(new Bookmark("Blog", "http://blog.frameworkdemoiselle.gov.br")); | |
| 349 | + insert(new Bookmark("Wiki", "http://wiki.frameworkdemoiselle.gov.br")); | |
| 350 | + insert(new Bookmark("Bug Tracking", "http://tracker.frameworkdemoiselle.gov.br")); | |
| 351 | + insert(new Bookmark("Forum", "http://forum.frameworkdemoiselle.gov.br")); | |
| 352 | + insert(new Bookmark("SVN", "http://svn.frameworkdemoiselle.gov.br")); | |
| 353 | + insert(new Bookmark("Maven", "http://repository.frameworkdemoiselle.gov.br")); | |
| 354 | + insert(new Bookmark("Downloads", "http://download.frameworkdemoiselle.gov.br")); | |
| 355 | + } | |
| 356 | + } | |
| 357 | + | |
| 358 | + } | |
| 359 | + ]]> | |
| 360 | + </programlisting> | |
| 354 | 361 | <para> |
| 355 | 362 | O método <function>startup()</function> nessa classe será invocado automaticamente durante a |
| 356 | 363 | inicialização da aplicação e fará com que a tabela seja populada com dados iniciais de bookmarks. |
| 357 | 364 | </para> |
| 358 | - <tip> | |
| 365 | + <note> | |
| 359 | 366 | <para> |
| 360 | 367 | A anotação <literal>@BusinessController</literal> trata-se de um estereótipo fornecido |
| 361 | - pelo <emphasis>Demoiselle Framework 2.X</emphasis> para indicar que uma classe será tratada | |
| 368 | + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada | |
| 362 | 369 | como controlador da camada de negócio na aplicação. |
| 363 | 370 | </para> |
| 364 | - </tip> | |
| 371 | + </note> | |
| 365 | 372 | <para> |
| 366 | 373 | A classe <literal>DelegateCrud</literal> faz parte do código de suporte fornecido pelo |
| 367 | - <emphasis>Demoiselle Framework 2.0</emphasis>. Ao utilizá-la, o desenvolvedor não precisará | |
| 374 | + <emphasis>Demoiselle Framework 2</emphasis>. Ao utilizá-la, o desenvolvedor não precisará | |
| 368 | 375 | implementar métodos de negócio triviais de uma entidade e tampouco programar a injeção de dependência |
| 369 | 376 | entre as camadas de negócio e persistência. Tal injeção será realizada de forma implícita. |
| 370 | 377 | </para> |
| 371 | - <note> | |
| 378 | + <tip> | |
| 372 | 379 | <para> |
| 373 | 380 | Recomenda-se usar o sufixo <quote>BC</quote> nessa classe para indicar que se trata de |
| 374 | 381 | um controlador de negócio (i.e., um <emphasis>BC - Business Controller</emphasis>). |
| 375 | 382 | </para> |
| 376 | - </note> | |
| 383 | + </tip> | |
| 377 | 384 | </section> |
| 378 | 385 | |
| 379 | 386 | <section> |
| 380 | - <title>Implementando a camada de apresentação</title> | |
| 387 | + <title>Camada de Apresentação</title> | |
| 381 | 388 | <para> |
| 382 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> crie a classe | |
| 383 | - <literal>BookmarkListMB</literal>, a qual será responsável por exibir as informações sobre | |
| 384 | - os bookmarks para o usuário: | |
| 389 | + Dentro do pacote <literal>package br.gov.frameworkdemoiselle.sample.bookmark.view</literal> foram criadas as | |
| 390 | + classes <literal>BookmarkEditMB</literal> e <literal>BookmarkListMB</literal>, onde a primeira é responsável | |
| 391 | + por controlar as modificações sobre os bookmarks efetuadas pelo usuário e a segunda é responsável por | |
| 392 | + exibir as informações sobre os bookmarks. | |
| 385 | 393 | </para> |
| 386 | - <programlisting role="JAVA"><![CDATA[@ViewController | |
| 394 | + | |
| 395 | + <programlisting role="JAVA"> | |
| 396 | +<![CDATA[@ViewController | |
| 397 | +@PreviousView("/bookmark_list.xhtml") | |
| 398 | +public class BookmarkEditMB extends AbstractEditPageBean<Bookmark, Long> { | |
| 399 | + | |
| 400 | + private static final long serialVersionUID = 1L; | |
| 401 | + | |
| 402 | + @Inject | |
| 403 | + private BookmarkBC bookmarkBC; | |
| 404 | + | |
| 405 | + @Override | |
| 406 | + @Transactional | |
| 407 | + public String delete() { | |
| 408 | + this.bookmarkBC.delete(getId()); | |
| 409 | + return getPreviousView(); | |
| 410 | + } | |
| 411 | + | |
| 412 | + @Override | |
| 413 | + @Transactional | |
| 414 | + public String insert() { | |
| 415 | + this.bookmarkBC.insert(getBean()); | |
| 416 | + return getPreviousView(); | |
| 417 | + } | |
| 418 | + | |
| 419 | + @Override | |
| 420 | + @Transactional | |
| 421 | + public String update() { | |
| 422 | + this.bookmarkBC.update(getBean()); | |
| 423 | + return getPreviousView(); | |
| 424 | + } | |
| 425 | + | |
| 426 | + @Override | |
| 427 | + protected void handleLoad() { | |
| 428 | + setBean(this.bookmarkBC.load(getId())); | |
| 429 | + } | |
| 430 | + | |
| 431 | +}]]> | |
| 432 | + </programlisting> | |
| 433 | + <programlisting role="JAVA"> | |
| 434 | +<![CDATA[@ViewController | |
| 435 | +@NextView("/bookmark_edit.xhtml") | |
| 436 | +@PreviousView("/bookmark_list.xhtml") | |
| 387 | 437 | public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { |
| 388 | 438 | |
| 389 | 439 | private static final long serialVersionUID = 1L; |
| ... | ... | @@ -393,141 +443,106 @@ public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { |
| 393 | 443 | |
| 394 | 444 | @Override |
| 395 | 445 | protected List<Bookmark> handleResultList() { |
| 396 | - return bc.findAll(); | |
| 446 | + return this.bc.findAll(); | |
| 397 | 447 | } |
| 398 | - | |
| 399 | -}]]></programlisting> | |
| 400 | - <tip> | |
| 401 | - <para> | |
| 402 | - A anotação <literal>@ViewController</literal> trata-se de um estereótipo fornecido | |
| 403 | - pelo <emphasis>Demoiselle Framework</emphasis> para indicar que uma classe será tratada | |
| 404 | - como controlador da camada de apresentação (i.e., visão) na aplicação. | |
| 405 | - </para> | |
| 406 | - </tip> | |
| 448 | + | |
| 449 | + @Transactional | |
| 450 | + public String deleteSelection() { | |
| 451 | + boolean delete; | |
| 452 | + for (Iterator<Long> iter = getSelection().keySet().iterator(); iter.hasNext();) { | |
| 453 | + Long id = iter.next(); | |
| 454 | + delete = getSelection().get(id); | |
| 455 | + | |
| 456 | + if (delete) { | |
| 457 | + bc.delete(id); | |
| 458 | + iter.remove(); | |
| 459 | + } | |
| 460 | + } | |
| 461 | + return getPreviousView(); | |
| 462 | + } | |
| 463 | + | |
| 464 | +}]]> | |
| 465 | + </programlisting> | |
| 466 | + | |
| 407 | 467 | <para> |
| 408 | - A classe <literal>AbstractListPageBean</literal> faz parte do código de suporte fornecido pelo | |
| 409 | - <emphasis>Demoiselle Framework</emphasis> (especificamente na extensão JSF). Ao utilizá-la, | |
| 410 | - o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de | |
| 411 | - cadastro (i.e., do tipo <emphasis>CRUD</emphasis>). | |
| 468 | + A anotação <literal>@ViewController</literal> trata-se de um estereótipo fornecido | |
| 469 | + pelo <emphasis>Demoiselle Framework 2</emphasis> para indicar que uma classe será tratada | |
| 470 | + como controlador da camada de apresentação (i.e., visão) na aplicação. | |
| 471 | + </para> | |
| 472 | + <para> | |
| 473 | + A anotação <literal>@NextView</literal> serve para definir a próxima | |
| 474 | + visão a ser direcionado o fluxo de navegação JSF. De forma semelhante, | |
| 475 | + a anotação <literal>@PreviousView</literal> define a visão anterior | |
| 476 | + de um fluxo. | |
| 412 | 477 | </para> |
| 413 | 478 | <para> |
| 414 | 479 | A anotação <literal>@Inject</literal> é fornecida pela especificação CDI. Ela realiza a injeção |
| 415 | 480 | de dependência da camada de negócio dentro do artefato da camada de apresentação. |
| 481 | + </para> | |
| 482 | + <para> | |
| 483 | + A anotação <literal>@Transactional</literal> trata-se de uma anotação fornecida pelo | |
| 484 | + <emphasis>Demoiselle Framework 2</emphasis> para indicar que o método em questão | |
| 485 | + será incluído na sessão transacional. Caso essa anotação esteja vinculada na classe, | |
| 486 | + todos os seus métodos serão considerados transacionais. | |
| 416 | 487 | </para> |
| 417 | - <note> | |
| 488 | + <para> | |
| 489 | + As classes <literal>AbstractEditPageBean</literal> e <literal>AbstractListPageBean</literal> fazem parte | |
| 490 | + do código de suporte fornecido pelo <emphasis>Demoiselle Framework 2</emphasis> (especificamente na extensão JSF). | |
| 491 | + Ao utilizá-las, o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de | |
| 492 | + cadastro (i.e., do tipo <emphasis>CRUD</emphasis>). | |
| 493 | + </para> | |
| 494 | + <tip> | |
| 418 | 495 | <para> |
| 419 | 496 | Recomenda-se usar o sufixo <quote>MB</quote> nessa classe para indicar que se trata de |
| 420 | 497 | um bean gerenciado do JSF (i.e., um <emphasis>MB - Managed Bean</emphasis>). |
| 421 | 498 | </para> |
| 422 | - </note> | |
| 499 | + </tip> | |
| 423 | 500 | <para> |
| 424 | - No diretório <filename>/src/main/webapp/</filename>, crie o arquivo | |
| 425 | - <filename>bookmark_list.xhtml</filename> com o conteúdo seguinte: | |
| 501 | + No diretório <filename>/src/main/webapp/</filename> foram criados os arquivos: | |
| 502 | + <itemizedlist> | |
| 503 | + <listitem><emphasis>bookmark_edit.xhtml</emphasis> - página JSF de cadastro e edição de bookmark;</listitem> | |
| 504 | + <listitem><emphasis>bookmark_list.xhtml</emphasis> - página JSF de cadastro e edição de bookmark;</listitem> | |
| 505 | + <listitem><emphasis>index.html</emphasis> - página HTML que redireciona para a página jsf;</listitem> | |
| 506 | + <listitem><emphasis>index.xhtml</emphasis> - página JSF inicial do sistema;</listitem> | |
| 507 | + <listitem><emphasis>menu.xhtml</emphasis> - página JSF que monta o menu de navegação.</listitem> | |
| 508 | + </itemizedlist> | |
| 426 | 509 | </para> |
| 427 | - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" | |
| 428 | - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" | |
| 429 | - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml"> | |
| 430 | - <ui:define name="body"> | |
| 431 | - <h:form> | |
| 432 | - <p:dataTable id="list" var="bean" value="#{bookmarkListMB.resultList}"> | |
| 433 | - <f:facet name="header">#{messages['bookmark.list.table.title']}</f:facet> | |
| 434 | - <p:column style="width:1%;"> | |
| 435 | - <h:selectBooleanCheckbox value="#{bookmarkListMB.selection[bean.id]}" /> | |
| 436 | - </p:column> | |
| 437 | - <p:column style="width:5%;" sortBy="#{bean.id}"> | |
| 438 | - <f:facet name="header">#{messages['bookmark.label.id']}</f:facet> | |
| 439 | - <h:outputText value="#{bean.id}" /> | |
| 440 | - </p:column> | |
| 441 | - <p:column sortBy="#{bean.description}"> | |
| 442 | - <f:facet name="header">#{messages['bookmark.label.description']}</f:facet> | |
| 443 | - <h:commandLink action="#{bookmarkListMB.getNextView}" | |
| 444 | - actionListener="#{bookmarkListMB.clear}"> | |
| 445 | - <h:outputText value="#{bean.description}" /> | |
| 446 | - <f:param name="id" value="#{bean.id}" /> | |
| 447 | - </h:commandLink> | |
| 448 | - </p:column> | |
| 449 | - <p:column sortBy="#{bean.link}"> | |
| 450 | - <f:facet name="header">#{messages['bookmark.label.link']}</f:facet> | |
| 451 | - <h:commandLink action="#{bookmarkListMB.getNextView}" | |
| 452 | - actionListener="#{bookmarkListMB.clear}"> | |
| 453 | - <h:outputText value="#{bean.link}" /> | |
| 454 | - <f:param name="id" value="#{bean.id}" /> | |
| 455 | - </h:commandLink> | |
| 456 | - </p:column> | |
| 457 | - </p:dataTable> | |
| 458 | - </h:form> | |
| 459 | - </ui:define> | |
| 460 | -</ui:composition>]]></programlisting> | |
| 461 | - <tip> | |
| 510 | + <para> | |
| 511 | + No diretório <filename>/src/main/webapp/template</filename> foi criado o arquivo: | |
| 512 | + <itemizedlist> | |
| 513 | + <listitem><emphasis>main.xhtml</emphasis> - página JSF que serve de template referenciada na demais páginas JSF.</listitem> | |
| 514 | + </itemizedlist> | |
| 515 | + </para> | |
| 516 | + <note> | |
| 462 | 517 | <para> |
| 463 | 518 | Nos arquivos XHTML listados neste exemplo foi empregado o framework |
| 464 | 519 | <ulink url="http://www.primefaces.org/">PrimeFaces</ulink>, o qual foi um dos primeiros a |
| 465 | 520 | oferecer suporte completo à especificação JSF 2.0. |
| 466 | 521 | </para> |
| 467 | - </tip> | |
| 468 | - <para> | |
| 469 | - No diretório <filename>/src/main/webapp/</filename>, altere o arquivo | |
| 470 | - <filename>menu.xhtml</filename> com o conteúdo seguinte: | |
| 471 | - </para> | |
| 472 | - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" | |
| 473 | - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" | |
| 474 | - xmlns:ui="http://java.sun.com/jsf/facelets"> | |
| 475 | - <h:form> | |
| 476 | - <p:menubar> | |
| 477 | - <p:submenu label="#{messages['menu.bookmark']}"> | |
| 478 | - <p:menuitem value="#{messages['menu.menuitem.list']}" | |
| 479 | - url="/bookmark_list.jsf" /> | |
| 480 | - </p:submenu> | |
| 481 | - <p:submenu> | |
| 482 | - <f:facet name="label"> | |
| 483 | - <p:menuitem value="#{messages['menu.menuitem.quit']}" | |
| 484 | - url="http://www.frameworkdemoiselle.gov.br/" /> | |
| 485 | - </f:facet> | |
| 486 | - </p:submenu> | |
| 487 | - </p:menubar> | |
| 488 | - </h:form> | |
| 489 | -</ui:composition>]]></programlisting> | |
| 522 | + </note> | |
| 490 | 523 | <para> |
| 491 | - No diretório <filename>/src/main/resources/</filename>, altere o arquivo | |
| 492 | - <filename>messages.properties</filename> incluindo as linhas a seguir: | |
| 524 | + No diretório <filename>/src/main/resources/</filename> podemos observar que foi criado o arquivo de recursos | |
| 525 | + <filename>messages.properties</filename>. Ao invés de manter fixas as descrições em rótulos, links, botões e | |
| 526 | + mensagens em uma aplicação, recomenda-se parametrizar esses textos em arquivos de recursos. Além de ser considerada | |
| 527 | + boa prática, essa medida facilita uma posterior internacionalização da aplicação para diversos idiomas. | |
| 493 | 528 | </para> |
| 494 | - <programlisting><![CDATA[bookmark.list.table.title=Lista de Links | |
| 495 | -bookmark.label.id=ID | |
| 496 | -bookmark.label.link=Link | |
| 497 | -bookmark.label.description=Descri\u00E7\u00E3o | |
| 498 | -bookmark.label=Bookmark | |
| 499 | - | |
| 500 | -bookmark.alt.id=ID | |
| 501 | -bookmark.alt.link=Link | |
| 502 | -bookmark.alt.description=Descri\u00E7\u00E3o | |
| 503 | - | |
| 504 | -menu.bookmark=Bookmarks]]></programlisting> | |
| 505 | 529 | <note> |
| 506 | 530 | <para> |
| 507 | 531 | O arquivo de recursos <filename>messages.properties</filename> armazenará textos |
| 508 | 532 | no idioma default da aplicação (neste caso, em Português do Brasil). |
| 509 | 533 | </para> |
| 510 | 534 | </note> |
| 511 | - <tip> | |
| 512 | - <para> | |
| 513 | - Ao invés de manter fixas as descrições em rótulos, links, botões e mensagens em uma | |
| 514 | - aplicação, recomenda-se parametrizar esses textos em arquivos de recursos. Além de | |
| 515 | - ser considerada boa prática, essa medida facilita uma posterior internacionalização | |
| 516 | - da aplicação para diversos idiomas. | |
| 517 | - </para> | |
| 518 | - </tip> | |
| 519 | 535 | </section> |
| 520 | 536 | |
| 521 | 537 | <section> |
| 522 | 538 | <title>Executando no servidor</title> |
| 523 | 539 | <para> |
| 524 | - A última etapa consiste na construção da aplicação Java Web e no respectivo deploy em um servidor | |
| 525 | - de aplicações. | |
| 540 | + A última etapa consiste em fazer o deploy da Java Web em um servidor de aplicações. | |
| 526 | 541 | </para> |
| 527 | 542 | <para> |
| 528 | 543 | Utilizando a IDE Eclipse, basta clicar com o botão direito no projeto <literal>bookmark</literal> e |
| 529 | 544 | acessar o menu <guimenu>Run As</guimenu>, <guimenu>Run on Server</guimenu>. Em seguida, escolha um |
| 530 | - servidor compatível com Java EE 6 (ex: JBoss AS 6) e aguarde a inicialização deste. | |
| 545 | + servidor compatível com Java EE 6 (ex: JBoss AS 7) e aguarde a inicialização deste. | |
| 531 | 546 | </para> |
| 532 | 547 | <mediaobject> |
| 533 | 548 | <imageobject role="fo"> |
| ... | ... | @@ -555,14 +570,6 @@ menu.bookmark=Bookmarks]]></programlisting> |
| 555 | 570 | direito no servidor desejado e selecione a opção <guimenu>Debug</guimenu>. |
| 556 | 571 | </para> |
| 557 | 572 | </tip> |
| 558 | - <note> | |
| 559 | - <para> | |
| 560 | - Também é possível efetuar esses passos em linha de comando. Para isso, execute o comando | |
| 561 | - <command>mvn package</command>, copie o arquivo <filename>bookmark.war</filename> resultante | |
| 562 | - para a pasta de deploy do servidor (ex: <filename>JBOSS_HOME/server/default/deploy</filename>) e | |
| 563 | - inicie este último através de seu comando próprio (ex: <filename>JBOSS_HOME/bin/run.sh</filename>). | |
| 564 | - </para> | |
| 565 | - </note> | |
| 566 | 573 | <para> |
| 567 | 574 | Em seguida, abra o navegador Web de sua preferência e acesse o endereço |
| 568 | 575 | <ulink url="http://localhost:8080/bookmark">http://localhost:8080/bookmark</ulink>. Esta é a |
| ... | ... | @@ -582,6 +589,24 @@ menu.bookmark=Bookmarks]]></programlisting> |
| 582 | 589 | </textobject> |
| 583 | 590 | </mediaobject> |
| 584 | 591 | </figure> |
| 592 | + <para> | |
| 593 | + Para cadastrar um novo bookmark basta ir no menu principal: <guimenu>Bookmarks</guimenu>, | |
| 594 | + <guimenu>Novo</guimenu>. Executando-a, será exibida a página a seguir: | |
| 595 | + </para> | |
| 596 | + <figure> | |
| 597 | + <title>Tela de cadastro e edição dos dados na aplicação Bookmark</title> | |
| 598 | + <mediaobject> | |
| 599 | + <imageobject role="fo"> | |
| 600 | + <imagedata fileref="images/appedit.png" align="center" scalefit="1" /> | |
| 601 | + </imageobject> | |
| 602 | + <imageobject role="html"> | |
| 603 | + <imagedata fileref="images/appedit.png" align="center" /> | |
| 604 | + </imageobject> | |
| 605 | + <textobject> | |
| 606 | + <phrase>Aplicação Bookmark em funcionamento</phrase> | |
| 607 | + </textobject> | |
| 608 | + </mediaobject> | |
| 609 | + </figure> | |
| 585 | 610 | </section> |
| 586 | 611 | |
| 587 | 612 | </chapter> |
| 588 | 613 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/images/appedit.png
documentation/quickstart/pt-BR/images/apphome.png
documentation/quickstart/pt-BR/images/appvalid.png
documentation/quickstart/pt-BR/images/viewserver.png
documentation/quickstart/pt-BR/instalacao.xml
| 1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
| 2 | 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| 3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
| 4 | -<chapter id="instalacao"> | |
| 5 | - | |
| 6 | - <title>Instalação</title> | |
| 7 | - | |
| 8 | - <section> | |
| 9 | - <title>Pré-requisitos</title> | |
| 10 | - <informaltable> | |
| 11 | - <tgroup cols="3"> | |
| 12 | - <colspec colwidth="50*" /> | |
| 13 | - <colspec colwidth="10*" /> | |
| 14 | - <colspec colwidth="40*" /> | |
| 15 | - <tbody> | |
| 16 | - <row> | |
| 17 | - <entry> | |
| 18 | - <emphasis role="bold">Software</emphasis> | |
| 19 | - </entry> | |
| 20 | - <entry> | |
| 21 | - <emphasis role="bold">Versão</emphasis> | |
| 22 | - </entry> | |
| 23 | - <entry> | |
| 24 | - <emphasis role="bold">Site (Download)</emphasis> | |
| 25 | - </entry> | |
| 26 | - </row> | |
| 27 | - <row> | |
| 28 | - <entry>Java Development Kit (JDK)</entry> | |
| 29 | - <entry>6.0</entry> | |
| 30 | - <entry><ulink url="http://openjdk.org/"><citetitle>openjdk.org</citetitle></ulink></entry> | |
| 31 | - </row> | |
| 32 | - <row> | |
| 33 | - <entry>Apache Maven</entry> | |
| 34 | - <entry>2.2</entry> | |
| 35 | - <entry><ulink url="http://maven.apache.org/docs/2.2.1/release-notes.html"><citetitle>maven.apache.org</citetitle></ulink></entry> | |
| 36 | - </row> | |
| 37 | - <row> | |
| 38 | - <entry>Eclipse IDE</entry> | |
| 39 | - <entry>3.7</entry> | |
| 40 | - <entry><ulink url="http://www.eclipse.org/downloads/packages/release/indigo/r"><citetitle>www.eclipse.org</citetitle></ulink></entry> | |
| 41 | - </row> | |
| 42 | - <row> | |
| 43 | - <entry>m2eclipse plugin</entry> | |
| 44 | - <entry>0.12</entry> | |
| 45 | - <entry><ulink url="http://m2eclipse.sonatype.org/installing-m2eclipse.html"><citetitle>m2eclipse.sonatype.org</citetitle></ulink></entry> | |
| 46 | - </row> | |
| 47 | - <row> | |
| 48 | - <entry>JBoss Application Server</entry> | |
| 49 | - <entry>6.0</entry> | |
| 50 | - <entry><ulink url="http://sourceforge.net/projects/jboss/files/JBoss/JBoss-6.0.0.Final/jboss-as-distribution-6.0.0.Final.zip/download"><citetitle>www.jboss.org</citetitle></ulink></entry> | |
| 51 | - </row> | |
| 52 | - </tbody> | |
| 53 | - </tgroup> | |
| 54 | - </informaltable> | |
| 55 | - </section> | |
| 56 | - | |
| 57 | - <section> | |
| 58 | - <title>Demoiselle Infra</title> | |
| 59 | - <para> | |
| 60 | - Para auxiliar no preparo do ambiente integrado de desenvolvimento utilizado na presente | |
| 61 | - documentação, recomenda-se a utilização dos pacotes de software fornecidos pelo projeto | |
| 62 | - <ulink url="http://demoiselle.sourceforge.net/infra/"><citetitle>Demoiselle Infra</citetitle></ulink>. | |
| 63 | - Neste link você encontrará as orientações necessárias para a sua configuração. | |
| 4 | + <chapter id="instalacao"> | |
| 5 | + <title>Instalação</title> | |
| 6 | + <section> | |
| 7 | + <title>Pré-requisitos</title> | |
| 8 | + <informaltable> | |
| 9 | + <tgroup cols="3"> | |
| 10 | + <colspec colwidth="50*" /> | |
| 11 | + <colspec colwidth="10*" /> | |
| 12 | + <colspec colwidth="40*" /> | |
| 13 | + <tbody> | |
| 14 | + <row> | |
| 15 | + <entry> | |
| 16 | + <emphasis role="bold">Software</emphasis> | |
| 17 | + </entry> | |
| 18 | + <entry> | |
| 19 | + <emphasis role="bold">Versão</emphasis> | |
| 20 | + </entry> | |
| 21 | + <entry> | |
| 22 | + <emphasis role="bold">Site (Download)</emphasis> | |
| 23 | + </entry> | |
| 24 | + </row> | |
| 25 | + <row> | |
| 26 | + <entry>Java Development Kit (JDK)</entry> | |
| 27 | + <entry>6.0</entry> | |
| 28 | + <entry> | |
| 29 | + <ulink url="http://openjdk.org/"> | |
| 30 | + <citetitle>openjdk.org</citetitle> | |
| 31 | + </ulink> | |
| 32 | + </entry> | |
| 33 | + </row> | |
| 34 | + <row> | |
| 35 | + <entry>Apache Maven</entry> | |
| 36 | + <entry>2.2</entry> | |
| 37 | + <entry> | |
| 38 | + <ulink url="http://maven.apache.org/docs/2.2.1/release-notes.html"> | |
| 39 | + <citetitle>maven.apache.org</citetitle> | |
| 40 | + </ulink> | |
| 41 | + </entry> | |
| 42 | + </row> | |
| 43 | + <row> | |
| 44 | + <entry>Eclipse IDE</entry> | |
| 45 | + <entry>3.7</entry> | |
| 46 | + <entry> | |
| 47 | + <ulink url="http://www.eclipse.org/downloads/packages/release/indigo/r"> | |
| 48 | + <citetitle>www.eclipse.org</citetitle> | |
| 49 | + </ulink> | |
| 50 | + </entry> | |
| 51 | + </row> | |
| 52 | + <row> | |
| 53 | + <entry>m2eclipse plugin</entry> | |
| 54 | + <entry>0.12</entry> | |
| 55 | + <entry> | |
| 56 | + <ulink url="http://m2eclipse.sonatype.org/installing-m2eclipse.html"> | |
| 57 | + <citetitle>m2eclipse.sonatype.org</citetitle> | |
| 58 | + </ulink> | |
| 59 | + </entry> | |
| 60 | + </row> | |
| 61 | + <row> | |
| 62 | + <entry>JBoss Application Server</entry> | |
| 63 | + <entry>7.1.1</entry> | |
| 64 | + <entry> | |
| 65 | + <ulink url="http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip"> | |
| 66 | + <citetitle>www.jboss.org</citetitle> | |
| 67 | + </ulink> | |
| 68 | + </entry> | |
| 69 | + </row> | |
| 70 | + </tbody> | |
| 71 | + </tgroup> | |
| 72 | + </informaltable> | |
| 73 | + </section> | |
| 74 | + <section> | |
| 75 | + <title>Demoiselle Infra</title> | |
| 76 | + <para> | |
| 77 | + Para auxiliar no preparo do ambiente integrado de desenvolvimento utilizado na presente | |
| 78 | + documentação, recomenda-se a utilização dos pacotes de software fornecidos pelo projeto | |
| 79 | + <ulink url="http://demoiselle.sourceforge.net/infra/"><citetitle>Demoiselle Infra</citetitle></ulink>. | |
| 80 | + Neste link você encontrará as orientações necessárias para a sua configuração. | |
| 81 | + </para> | |
| 82 | + <note> | |
| 83 | + <para> | |
| 84 | + Atualmente são disponibilizados pacotes exclusivamente para a plataforma <emphasis>GNU/Linux</emphasis> | |
| 85 | + e distribuições baseadas no <emphasis>Debian</emphasis>, tal como <emphasis>Ubuntu</emphasis>. | |
| 64 | 86 | </para> |
| 65 | - <note> | |
| 66 | - <para> | |
| 67 | - Atualmente são disponibilizados pacotes exclusivamente para a plataforma <emphasis>GNU/Linux</emphasis> | |
| 68 | - e distribuições baseadas no <emphasis>Debian</emphasis>, tal como <emphasis>Ubuntu</emphasis>. | |
| 69 | - </para> | |
| 70 | - </note> | |
| 71 | - <para> | |
| 87 | + </note> | |
| 88 | + <para> | |
| 72 | 89 | Se você não utiliza nenhum dos sistemas operacionais citados, terá que baixar e instalar |
| 73 | 90 | todos os softwares listados acima. Para auxiliar um pouco o processo, disponibilizamos alguns |
| 74 | - vídeos <ulink url="http://www.frameworkdemoiselle.gov.br/documentacaodoprojeto/tutoriais/videos/"> | |
| 75 | - <citetitle>aqui</citetitle></ulink> de demonstração de algumas fases. | |
| 76 | - </para> | |
| 77 | - </section> | |
| 78 | - | |
| 79 | -</chapter> | |
| 80 | 91 | \ No newline at end of file |
| 92 | + vídeos <ulink url="http://www.frameworkdemoiselle.gov.br/documentacaodoprojeto/manuais-e-tutoriais/tutoriais-da-versao-2/"> | |
| 93 | + <citetitle>aqui</citetitle></ulink> de demonstração de algumas fases. | |
| 94 | + </para> | |
| 95 | + </section> | |
| 96 | + </chapter> | ... | ... |
documentation/quickstart/pt-BR/master.xml
| 1 | 1 | <?xml version='1.0' encoding="utf-8"?> |
| 2 | 2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| 3 | 3 | "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> |
| 4 | -<book lang="pt"> | |
| 4 | + <book lang="pt"> | |
| 5 | + <xi:include href="bookinfo.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 6 | + <xi:include href="preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 7 | + <xi:include href="instalacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 8 | + <xi:include href="criacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 9 | + <xi:include href="melhoria.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 10 | + </book> | |
| 11 | + | |
| 12 | +<!-- | |
| 13 | + | |
| 14 | + <xi:include href="avancado.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 15 | +--> | |
| 5 | 16 | |
| 6 | - <xi:include href="bookinfo.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 7 | - | |
| 8 | - <preface> | |
| 9 | - <title>Sobre o QuickStart</title> | |
| 10 | - <para> | |
| 11 | - Este documento é um tutorial do tipo "passo a passo" que visa ilustrar de forma rápida, clara e prática | |
| 12 | - a criação de uma aplicação simples utilizando o <emphasis>Demoiselle Framework 2.X</emphasis>. | |
| 13 | - </para> | |
| 14 | - <note> | |
| 15 | - <para> | |
| 16 | - Apesar de o <emphasis>Demoiselle Framework 2.X</emphasis> ser simples de usar, o desenvolvimento de | |
| 17 | - aplicações não triviais requer o conhecimento das diversas tecnologias envolvidas na especificação | |
| 18 | - <emphasis>Java EE</emphasis>, incluindo: | |
| 19 | - <itemizedlist> | |
| 20 | - <listitem>Linguagem Java</listitem> | |
| 21 | - <listitem>Servlets, JSP e Tag Libraries</listitem> | |
| 22 | - <listitem>JavaBeans</listitem> | |
| 23 | - <listitem>HTML e XML</listitem> | |
| 24 | - <listitem>Contêineres e Servidores Web</listitem> | |
| 25 | - </itemizedlist> | |
| 26 | - </para> | |
| 27 | - </note> | |
| 28 | - <note> | |
| 29 | - <para> | |
| 30 | - Esta documentação refere-se à release 2.2.X do <emphasis>Demoiselle Framework</emphasis> | |
| 31 | - e pode diferir significativamente das versões anteriores. | |
| 32 | - </para> | |
| 33 | - </note> | |
| 34 | - </preface> | |
| 35 | - | |
| 36 | - <xi:include href="instalacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 37 | - <xi:include href="criacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 38 | - <xi:include href="melhoria.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> | |
| 39 | -<!-- <xi:include href="avancado.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />--> | |
| 40 | - | |
| 41 | -</book> | |
| 42 | 17 | \ No newline at end of file | ... | ... |
documentation/quickstart/pt-BR/melhoria.xml
| ... | ... | @@ -6,359 +6,80 @@ |
| 6 | 6 | <title>Melhorando a aplicação</title> |
| 7 | 7 | |
| 8 | 8 | <section> |
| 9 | - <title>Implementando funcionalidade de edição</title> | |
| 10 | - <para> | |
| 11 | - Agora que a aplicação inicial já está rodando, iremos aumentar sua complexidade adicionando a | |
| 12 | - funcionalidade de edição dos registros de bookmark. | |
| 13 | - </para> | |
| 14 | - <para> | |
| 15 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> crie a classe | |
| 16 | - <literal>BookmarkEditMB</literal>, a qual será responsável por controlar as modificações sobre | |
| 17 | - os bookmarks efetuadas pelo usuário: | |
| 18 | - </para> | |
| 19 | - <programlisting role="JAVA"><![CDATA[@ViewController | |
| 20 | -@PreviousView("/bookmark_list.xhtml") | |
| 21 | -public class BookmarkEditMB extends AbstractEditPageBean<Bookmark, Long> { | |
| 22 | - | |
| 23 | - private static final long serialVersionUID = 1L; | |
| 24 | - | |
| 25 | - @Inject | |
| 26 | - private BookmarkBC bc; | |
| 27 | - | |
| 28 | - @Override | |
| 29 | - @Transactional | |
| 30 | - public String delete() { | |
| 31 | - bc.delete(getId()); | |
| 32 | - return getPreviousView(); | |
| 33 | - } | |
| 34 | - | |
| 35 | - @Override | |
| 36 | - @Transactional | |
| 37 | - public String insert() { | |
| 38 | - bc.insert(getBean()); | |
| 39 | - return getPreviousView(); | |
| 40 | - } | |
| 41 | - | |
| 42 | - @Override | |
| 43 | - @Transactional | |
| 44 | - public String update() { | |
| 45 | - bc.update(getBean()); | |
| 46 | - return getPreviousView(); | |
| 47 | - } | |
| 48 | - | |
| 49 | - @Override | |
| 50 | - protected void handleLoad() { | |
| 51 | - setBean(bc.load(getId())); | |
| 52 | - } | |
| 53 | - | |
| 54 | -}]]></programlisting> | |
| 55 | - <tip> | |
| 56 | - <para> | |
| 57 | - A anotação <literal>@Transactional</literal> trata-se de uma anotação fornecida pelo | |
| 58 | - <emphasis>Demoiselle Framework</emphasis> para indicar que o método em questão | |
| 59 | - será incluído na sessão transacional. Caso essa anotação esteja vinculada na classe, | |
| 60 | - todos os seus métodos serão considerados transacionais. | |
| 61 | - </para> | |
| 62 | - </tip> | |
| 63 | - <para> | |
| 64 | - A classe <literal>AbstractEditPageBean</literal> faz parte do código de suporte fornecido pelo | |
| 65 | - <emphasis>Demoiselle Framework</emphasis> (especificamente na extensão JSF). Ao utilizá-la, | |
| 66 | - o desenvolvedor não precisará implementar métodos específicos de navegação para uma tela de | |
| 67 | - cadastro (i.e., do tipo <emphasis>CRUD</emphasis>). | |
| 68 | - </para> | |
| 69 | - <para> | |
| 70 | - Ainda no pacote <literal>br.gov.frameworkdemoiselle.sample.view</literal> altere a classe | |
| 71 | - <literal>BookmarkListMB</literal>: | |
| 72 | - </para> | |
| 73 | - <programlistingco> | |
| 74 | - <areaspec> | |
| 75 | - <area id="next-prev-view" coords="2"/> | |
| 76 | - <area id="delete-selection" coords="16"/> | |
| 77 | - </areaspec> | |
| 78 | - <programlisting role="JAVA"><![CDATA[@ViewController | |
| 79 | -@NextView("/bookmark_edit.xhtml") | |
| 80 | -@PreviousView("/bookmark_list.xhtml") | |
| 81 | -public class BookmarkListMB extends AbstractListPageBean<Bookmark, Long> { | |
| 82 | - | |
| 83 | - private static final long serialVersionUID = 1L; | |
| 84 | - | |
| 85 | - @Inject | |
| 86 | - private BookmarkBC bc; | |
| 87 | - | |
| 88 | - @Override | |
| 89 | - protected List<Bookmark> handleResultList() { | |
| 90 | - return bc.findAll(); | |
| 91 | - } | |
| 92 | - | |
| 93 | - @Transactional | |
| 94 | - public String deleteSelection() { | |
| 95 | - boolean delete = false; | |
| 96 | - Iterator<Long> iter = getSelection().keySet().iterator(); | |
| 97 | - while (iter.hasNext()) { | |
| 98 | - Long id = iter.next(); | |
| 99 | - delete = getSelection().get(id); | |
| 100 | - if (delete) { | |
| 101 | - bc.delete(id); | |
| 102 | - iter.remove(); | |
| 103 | - } | |
| 104 | - } | |
| 105 | - return getPreviousView(); | |
| 106 | - } | |
| 107 | - | |
| 108 | -}]]></programlisting> | |
| 109 | - <calloutlist> | |
| 110 | - <callout arearefs="next-prev-view"> | |
| 111 | - <para> | |
| 112 | - A anotação <literal>@NextView</literal> serve para definir a próxima | |
| 113 | - visão a ser direcionado o fluxo de navegação JSF. De forma semelhante, | |
| 114 | - a anotação <literal>@PreviousView</literal> define a visão anterior | |
| 115 | - de um fluxo. | |
| 116 | - </para> | |
| 117 | - </callout> | |
| 118 | - <callout arearefs="delete-selection"> | |
| 119 | - <para> | |
| 120 | - O novo método <function>deleteSelection()</function> servirá para | |
| 121 | - permitir a funcionalidade de exclusão de múltiplas linhas da tabela. | |
| 122 | - A anotação <literal>@Transactional</literal> nele faz com que o método | |
| 123 | - seja considerado como transacional, incluindo-o na respectiva sessão. | |
| 124 | - </para> | |
| 125 | - </callout> | |
| 126 | - </calloutlist> | |
| 127 | - </programlistingco> | |
| 128 | - <para> | |
| 129 | - No diretório <filename>/src/main/webapp/</filename>, crie o arquivo | |
| 130 | - <filename>bookmark_edit.xhtml</filename> com o conteúdo seguinte: | |
| 131 | - </para> | |
| 132 | - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" | |
| 133 | - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" | |
| 134 | - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml"> | |
| 135 | - <ui:define name="body"> | |
| 136 | - <h:form prependId="false"> | |
| 137 | - <p:toolbar> | |
| 138 | - <p:toolbarGroup align="left"> | |
| 139 | - <p:commandButton value="#{messages['button.save']}" | |
| 140 | - action="#{bookmarkEditMB.insert}" | |
| 141 | - rendered="#{!bookmarkEditMB.updateMode}" ajax="false" /> | |
| 142 | - <p:commandButton value="#{messages['button.save']}" | |
| 143 | - action="#{bookmarkEditMB.update}" | |
| 144 | - rendered="#{bookmarkEditMB.updateMode}" ajax="false" /> | |
| 145 | - <p:commandButton value="#{messages['button.delete']}" | |
| 146 | - onclick="confirmation.show()" rendered="#{bookmarkEditMB.updateMode}" | |
| 147 | - type="button" immediate="true" ajax="false" /> | |
| 148 | - <p:confirmDialog message="#{messages['label.confirm.delete']}" | |
| 149 | - showEffect="bounce" hideEffect="explode" | |
| 150 | - header="#{messages['label.dialog.delete']}" | |
| 151 | - severity="alert" widgetVar="confirmation"> | |
| 152 | - <h:commandButton value="#{messages['button.dialog.yes']}" | |
| 153 | - action="#{bookmarkEditMB.delete}" immediate="true" ajax="false" /> | |
| 154 | - <h:commandButton value="#{messages['button.dialog.no']}" | |
| 155 | - onclick="confirmation.hide()" type="button" /> | |
| 156 | - </p:confirmDialog> | |
| 157 | - </p:toolbarGroup> | |
| 158 | - </p:toolbar> | |
| 159 | - <br /> | |
| 160 | - <p:fieldset legend="#{messages['bookmark.label']}" toggleable="true" | |
| 161 | - toggleSpeed="500"> | |
| 162 | - <h:panelGrid id="fields" columns="3"> | |
| 163 | - <h:outputLabel value="#{messages['bookmark.label.id']}: " | |
| 164 | - for="id" styleClass="text-input" /> | |
| 165 | - <h:outputText id="id" value="#{bookmarkEditMB.bean.id}" /> | |
| 166 | - <p:message for="id" /> | |
| 167 | - <h:outputLabel value="#{messages['bookmark.label.description']}: " | |
| 168 | - for="description" styleClass="text-input" /> | |
| 169 | - <h:inputText id="description" value="#{bookmarkEditMB.bean.description}" | |
| 170 | - title="#{messages['bookmark.alt.description']}" /> | |
| 171 | - <p:message for="description" /> | |
| 172 | - <h:outputLabel value="#{messages['bookmark.label.link']}: " | |
| 173 | - for="link" styleClass="text-input" /> | |
| 174 | - <h:inputText id="link" value="#{bookmarkEditMB.bean.link}" | |
| 175 | - title="#{messages['bookmark.alt.link']}" /> | |
| 176 | - <p:message for="link" /> | |
| 177 | - </h:panelGrid> | |
| 178 | - </p:fieldset> | |
| 179 | - </h:form> | |
| 180 | - </ui:define> | |
| 181 | -</ui:composition>]]></programlisting> | |
| 182 | - <para> | |
| 183 | - Ainda no diretório <filename>/src/main/webapp/</filename>, modifique o arquivo | |
| 184 | - <filename>bookmark_list.xhtml</filename> com o conteúdo seguinte: | |
| 185 | - </para> | |
| 186 | - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" | |
| 187 | - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" | |
| 188 | - xmlns:ui="http://java.sun.com/jsf/facelets" template="/template/main.xhtml"> | |
| 189 | - <ui:define name="body"> | |
| 190 | - <h:form> | |
| 191 | - <p:toolbar> | |
| 192 | - <p:toolbarGroup align="left"> | |
| 193 | - <p:commandButton title="#{messages['button.new']}" | |
| 194 | - image="ui-icon-document" action="#{bookmarkListMB.getNextView}" | |
| 195 | - actionListener="#{bookmarkListMB.clear}" ajax="false" /> | |
| 196 | - <p:commandButton title="#{messages['button.delete']}" | |
| 197 | - image="ui-icon-trash" onclick="confirmation.show()" type="button" | |
| 198 | - immediate="true" ajax="false" /> | |
| 199 | - <p:confirmDialog message="#{messages['label.confirm.delete']}" | |
| 200 | - showEffect="bounce" hideEffect="explode" | |
| 201 | - header="#{messages['label.dialog.alert']}!" | |
| 202 | - severity="alert" widgetVar="confirmation"> | |
| 203 | - <h:commandButton value="#{messages['button.dialog.yes']}" | |
| 204 | - action="#{bookmarkListMB.deleteSelection}" | |
| 205 | - actionListener="#{bookmarkListMB.clear}" /> | |
| 206 | - <h:commandButton value="#{messages['button.dialog.no']}" | |
| 207 | - onclick="confirmation.hide()" type="button" /> | |
| 208 | - </p:confirmDialog> | |
| 209 | - </p:toolbarGroup> | |
| 210 | - </p:toolbar> | |
| 211 | - <p:dataTable id="list" var="bean" value="#{bookmarkListMB.resultList}"> | |
| 212 | - <f:facet name="header">#{messages['bookmark.list.table.title']}</f:facet> | |
| 213 | - <p:column style="width:1%;"> | |
| 214 | - <h:selectBooleanCheckbox value="#{bookmarkListMB.selection[bean.id]}" /> | |
| 215 | - </p:column> | |
| 216 | - <p:column style="width:5%;" sortBy="#{bean.id}"> | |
| 217 | - <f:facet name="header">#{messages['bookmark.label.id']}</f:facet> | |
| 218 | - <h:outputText value="#{bean.id}" /> | |
| 219 | - </p:column> | |
| 220 | - <p:column sortBy="#{bean.description}"> | |
| 221 | - <f:facet name="header">#{messages['bookmark.label.description']}</f:facet> | |
| 222 | - <h:commandLink action="#{bookmarkListMB.getNextView}" | |
| 223 | - actionListener="#{bookmarkListMB.clear}"> | |
| 224 | - <h:outputText value="#{bean.description}" /> | |
| 225 | - <f:param name="id" value="#{bean.id}" /> | |
| 226 | - </h:commandLink> | |
| 227 | - </p:column> | |
| 228 | - <p:column sortBy="#{bean.link}"> | |
| 229 | - <f:facet name="header">#{messages['bookmark.label.link']}</f:facet> | |
| 230 | - <h:commandLink action="#{bookmarkListMB.getNextView}" | |
| 231 | - actionListener="#{bookmarkListMB.clear}"> | |
| 232 | - <h:outputText value="#{bean.link}" /> | |
| 233 | - <f:param name="id" value="#{bean.id}" /> | |
| 234 | - </h:commandLink> | |
| 235 | - </p:column> | |
| 236 | - </p:dataTable> | |
| 237 | - </h:form> | |
| 238 | - </ui:define> | |
| 239 | -</ui:composition>]]></programlisting> | |
| 240 | - <para> | |
| 241 | - No diretório <filename>/src/main/webapp/</filename>, altere o arquivo | |
| 242 | - <filename>menu.xhtml</filename> conforme o conteúdo seguinte: | |
| 243 | - </para> | |
| 244 | - <programlisting role="XML"><![CDATA[<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" | |
| 245 | - xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" | |
| 246 | - xmlns:ui="http://java.sun.com/jsf/facelets"> | |
| 247 | - <h:form> | |
| 248 | - <p:menubar> | |
| 249 | - <p:submenu label="#{messages['menu.bookmark']}"> | |
| 250 | - <p:menuitem value="#{messages['menu.menuitem.new']}" | |
| 251 | - url="/bookmark_edit.jsf" /> | |
| 252 | - <p:menuitem value="#{messages['menu.menuitem.list']}" | |
| 253 | - url="/bookmark_list.jsf" /> | |
| 254 | - </p:submenu> | |
| 255 | - <p:submenu> | |
| 256 | - <f:facet name="label"> | |
| 257 | - <p:menuitem value="#{messages['menu.menuitem.quit']}" | |
| 258 | - url="http://www.frameworkdemoiselle.gov.br/" /> | |
| 259 | - </f:facet> | |
| 260 | - </p:submenu> | |
| 261 | - </p:menubar> | |
| 262 | - </h:form> | |
| 263 | -</ui:composition>]]></programlisting> | |
| 264 | - <para> | |
| 265 | - Tendo feito todas essas alterações, reconstrua o projeto Java e faça novo deploy no | |
| 266 | - servidor de aplicações. Ao acessar a aplicação <literal>bookmark</literal> pelo browser, | |
| 267 | - verá que agora existe uma opção nova no menu principal: <guimenu>Bookmarks</guimenu>, | |
| 268 | - <guimenu>Novo</guimenu>. Executando-a, será exibida a página a seguir: | |
| 269 | - </para> | |
| 270 | - <figure> | |
| 271 | - <title>Edição dos dados na aplicação Bookmark</title> | |
| 272 | - <mediaobject> | |
| 273 | - <imageobject role="fo"> | |
| 274 | - <imagedata fileref="images/appedit.png" align="center" scalefit="1" /> | |
| 275 | - </imageobject> | |
| 276 | - <imageobject role="html"> | |
| 277 | - <imagedata fileref="images/appedit.png" align="center" /> | |
| 278 | - </imageobject> | |
| 279 | - <textobject> | |
| 280 | - <phrase>Aplicação Bookmark em funcionamento</phrase> | |
| 281 | - </textobject> | |
| 282 | - </mediaobject> | |
| 283 | - </figure> | |
| 284 | - </section> | |
| 285 | - | |
| 286 | - <section> | |
| 287 | 9 | <title>Exibindo mensagens para o usuário</title> |
| 288 | 10 | <para> |
| 289 | 11 | Uma vez que o objetivo principal da aplicação foi concluído (i.e., listagem e edição de bookmarks), |
| 290 | - veremos algumas funcionalidades adicionais fornecidas pelo <emphasis>Demoiselle Framework</emphasis>, | |
| 12 | + veremos algumas funcionalidades adicionais fornecidas pelo <emphasis>Demoiselle Framework 2</emphasis>, | |
| 291 | 13 | iniciando pelo tratamento de mensagens. |
| 292 | 14 | </para> |
| 293 | 15 | <para> |
| 294 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.message</literal> crie a interface | |
| 16 | + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.message</literal> crie a interface | |
| 295 | 17 | <literal>InfoMessages</literal>, a qual servirá para armazenar mensagens informativas a serem |
| 296 | 18 | exibidas ao usuário: |
| 297 | 19 | </para> |
| 298 | - <programlisting role="JAVA"><![CDATA[public interface InfoMessages { | |
| 299 | - | |
| 300 | - final Message BOOKMARK_DELETE_OK = new DefaultMessage("{bookmark-delete-ok}"); | |
| 301 | - final Message BOOKMARK_INSERT_OK = new DefaultMessage("{bookmark-insert-ok}"); | |
| 302 | - final Message BOOKMARK_UPDATE_OK = new DefaultMessage("{bookmark-update-ok}"); | |
| 303 | - | |
| 304 | -}]]></programlisting> | |
| 20 | + <programlisting role="JAVA"> | |
| 21 | + <![CDATA[public interface InfoMessages { | |
| 22 | + final Message BOOKMARK_DELETE_OK = new DefaultMessage("{bookmark-delete-ok}"); | |
| 23 | + final Message BOOKMARK_INSERT_OK = new DefaultMessage("{bookmark-insert-ok}"); | |
| 24 | + final Message BOOKMARK_UPDATE_OK = new DefaultMessage("{bookmark-update-ok}"); | |
| 25 | + }]]></programlisting> | |
| 305 | 26 | <note> |
| 306 | - <para> | |
| 307 | - A unidade básica de manipulação de mensagens no <emphasis>Demoiselle Framework</emphasis> | |
| 308 | - é a interface <literal>Message</literal>. Ou seja, basta que esta última seja implementada na | |
| 309 | - aplicação para que o contexto de mensagens possa manipulá-la. | |
| 310 | - A classe <literal>DefaultMessage</literal> é oferecida como implementação padrão dessa interface. | |
| 311 | - </para> | |
| 27 | + <para> | |
| 28 | + A unidade básica de manipulação de mensagens no <emphasis>Demoiselle Framework 2</emphasis> | |
| 29 | + é a interface <literal>Message</literal>. Ou seja, basta que esta última seja implementada na | |
| 30 | + aplicação para que o contexto de mensagens possa manipulá-la. | |
| 31 | + A classe <literal>DefaultMessage</literal> é oferecida como implementação padrão dessa interface. | |
| 32 | + </para> | |
| 312 | 33 | </note> |
| 313 | 34 | <para> |
| 314 | 35 | No exemplo em questão, o texto das mensagens será recuperado do arquivo de recursos |
| 315 | 36 | <filename>messages.properties</filename> previamente criado no diretório |
| 316 | 37 | <filename>/src/main/resources/</filename>. Para isso, adicione as seguintes linhas nesse arquivo: |
| 317 | 38 | </para> |
| 318 | -<programlisting role="XML"><![CDATA[bookmark-delete-ok=Bookmark exclu\u00EDdo\: {0} | |
| 39 | + <programlisting role="XML"> | |
| 40 | +<![CDATA[bookmark-delete-ok=Bookmark exclu\u00EDdo\: {0} | |
| 319 | 41 | bookmark-insert-ok=Bookmark inserido: {0} |
| 320 | -bookmark-update-ok=Bookmark atualizado: {0}]]></programlisting> | |
| 42 | +bookmark-update-ok=Bookmark atualizado: {0}]]> | |
| 43 | + </programlisting> | |
| 321 | 44 | <para> |
| 322 | - Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.business</literal> altere a classe | |
| 45 | + Dentro do pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.business</literal> altere a classe | |
| 323 | 46 | <literal>BookmarkBC</literal> incluindo os trechos de código indicados a seguir: |
| 324 | 47 | </para> |
| 325 | 48 | <programlistingco> |
| 326 | 49 | <areaspec> |
| 327 | 50 | <area id="inject-context" coords="5"/> |
| 328 | 51 | <areaset id="add-msg-context" coords=""> |
| 329 | - <area id="" coords="12"/> | |
| 330 | - <area id="" coords="19"/> | |
| 331 | - <area id="" coords="26"/> | |
| 52 | + <area id="" coords="10"/> | |
| 53 | + <area id="" coords="17"/> | |
| 54 | + <area id="" coords="23"/> | |
| 332 | 55 | </areaset> |
| 333 | 56 | </areaspec> |
| 334 | - <programlisting role="JAVA"><![CDATA[@BusinessController | |
| 335 | -public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { | |
| 57 | + <programlisting role="JAVA"> | |
| 58 | +<![CDATA[@BusinessController | |
| 59 | + public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { | |
| 336 | 60 | |
| 337 | - @Inject | |
| 338 | - private MessageContext messageContext; | |
| 61 | + @Inject | |
| 62 | + private MessageContext messageContext; | |
| 339 | 63 | |
| 340 | - ... | |
| 64 | + ... | |
| 341 | 65 | |
| 342 | - @Override | |
| 343 | - public void insert(Bookmark bookmark) { | |
| 344 | - super.insert(bookmark); | |
| 345 | - messageContext.add(InfoMessages.BOOKMARK_INSERT_OK, | |
| 346 | - bookmark.getDescription()); | |
| 347 | - } | |
| 348 | - | |
| 349 | - @Override | |
| 350 | - public void update(Bookmark bookmark) { | |
| 351 | - super.update(bookmark); | |
| 352 | - messageContext.add(InfoMessages.BOOKMARK_UPDATE_OK, | |
| 353 | - bookmark.getDescription()); | |
| 354 | - } | |
| 66 | + @Override | |
| 67 | + public void insert(Bookmark bookmark) { | |
| 68 | + super.insert(bookmark); | |
| 69 | + messageContext.add(InfoMessages.BOOKMARK_INSERT_OK, bookmark.getDescription()); | |
| 70 | + } | |
| 355 | 71 | |
| 356 | - @Override | |
| 357 | - public void delete(Long id) { | |
| 358 | - super.delete(id); | |
| 359 | - messageContext.add(InfoMessages.BOOKMARK_DELETE_OK, id); | |
| 360 | - } | |
| 72 | + @Override | |
| 73 | + public void update(Bookmark bookmark) { | |
| 74 | + super.update(bookmark); | |
| 75 | + messageContext.add(InfoMessages.BOOKMARK_UPDATE_OK, bookmark.getDescription()); | |
| 76 | + } | |
| 361 | 77 | |
| 78 | + @Override | |
| 79 | + public void delete(Long id) { | |
| 80 | + super.delete(id); | |
| 81 | + messageContext.add(InfoMessages.BOOKMARK_DELETE_OK, id); | |
| 82 | + } | |
| 362 | 83 | }]]></programlisting> |
| 363 | 84 | <calloutlist> |
| 364 | 85 | <callout arearefs="inject-context"> |
| ... | ... | @@ -410,119 +131,123 @@ public class BookmarkBC extends DelegateCrud<Bookmark, Long, BookmarkDAO> { |
| 410 | 131 | </section> |
| 411 | 132 | |
| 412 | 133 | <section> |
| 413 | - <title>Criando regras de validação nos campos</title> | |
| 414 | - <para> | |
| 415 | - Sendo aderente à especificação Java EE 6, o <emphasis>Demoiselle Framework</emphasis> | |
| 416 | - recomenda e faz uso do mecanismo de validação provido pela especificação | |
| 417 | - <ulink url="http://jcp.org/en/jsr/detail?id=303">JSR-303 (Bean Validation)</ulink>. | |
| 418 | - </para> | |
| 419 | - <para> | |
| 420 | - A fim de testarmos mais essa funcionalidade, utilizaremos a implementação de validação | |
| 421 | - <emphasis>Hibernate Validator</emphasis>. Para tal, abra o arquivo <filename>pom.xml</filename> | |
| 422 | - do projeto <literal>bookmark</literal> e inclua nele a seguinte dependência: | |
| 423 | - </para> | |
| 424 | - <programlisting role="XML"><![CDATA[<dependencies> | |
| 425 | - ... | |
| 426 | - <dependency> | |
| 427 | - <groupId>org.hibernate</groupId> | |
| 428 | - <artifactId>hibernate-validator</artifactId> | |
| 429 | - <version>4.1.0.Final</version> | |
| 430 | - </dependency> | |
| 431 | -</dependencies>]]></programlisting> | |
| 432 | - <note> | |
| 134 | + <title>Criando regras de validação nos campos</title> | |
| 433 | 135 | <para> |
| 434 | - O objetivo dessa abordagem de validação é auxiliar na criação de restrições diretamente nas | |
| 435 | - entidades de domínio. Tais restrições serão utilizadas de forma conjunta nas camadas de | |
| 436 | - persistência e apresentação da aplicação. A vantagem é que elas são facilmente configuráveis, | |
| 437 | - bastando apenas incluir certas anotações (ex: <literal>@NotNull</literal>, <literal>@Size</literal>) | |
| 438 | - nos campos da classe a ser validada. | |
| 136 | + Sendo aderente à especificação Java EE 6, o <emphasis>Demoiselle Framework</emphasis> | |
| 137 | + recomenda e faz uso do mecanismo de validação provido pela especificação | |
| 138 | + <ulink url="http://jcp.org/en/jsr/detail?id=303">JSR-303 (Bean Validation)</ulink>. | |
| 439 | 139 | </para> |
| 440 | - </note> | |
| 441 | - <para> | |
| 442 | - No pacote <literal>br.gov.frameworkdemoiselle.sample.domain</literal> altere a entidade de domínio | |
| 443 | - <literal>Bookmark</literal> incluindo as anotações de validação nos campos <literal>description</literal> | |
| 444 | - e <literal>link</literal> conforme ilustrado a seguir: | |
| 445 | - </para> | |
| 446 | - <programlistingco> | |
| 447 | - <areaspec> | |
| 448 | - <area id="valid-desc" coords="9"/> | |
| 449 | - <area id="valid-link" coords="14"/> | |
| 450 | - </areaspec> | |
| 451 | - <programlisting role="JAVA"><![CDATA[@Entity | |
| 452 | -public class Bookmark { | |
| 453 | - | |
| 454 | - @Id | |
| 455 | - @GeneratedValue | |
| 456 | - private Long id; | |
| 457 | - | |
| 458 | - @Column | |
| 459 | - @NotNull | |
| 460 | - @Size(min = 1, max = 20) | |
| 461 | - private String description; | |
| 462 | - | |
| 463 | - @Column | |
| 464 | - @NotNull | |
| 465 | - @NotBlank | |
| 466 | - @Size(max = 255) | |
| 467 | - @URL | |
| 468 | - private String link; | |
| 469 | - | |
| 470 | - ... | |
| 471 | -}]]></programlisting> | |
| 472 | - <calloutlist> | |
| 473 | - <callout arearefs="valid-desc"> | |
| 474 | - <para> | |
| 475 | - No campo <literal>description</literal>, a anotação <literal>@NotNull</literal> serve | |
| 476 | - para impedir que o valor nulo seja atribuído a ele. Já a anotação <literal>@Size</literal> | |
| 477 | - restringe a quantidade mínima e máxima de caracteres no campo. | |
| 478 | - </para> | |
| 479 | - </callout> | |
| 480 | - <callout arearefs="valid-link"> | |
| 481 | - <para> | |
| 482 | - No campo <literal>link</literal> mais restrições são aplicadas. Além de não permitir o valor | |
| 483 | - nulo (com <literal>@NotNull</literal>) e estipular o comprimento máximo de 255 caracteres | |
| 484 | - (com <literal>@Size</literal>), o campo não pode ficar vazio (com <literal>@NotBlank</literal>) | |
| 485 | - e seu conteúdo deve ser um endereço de Internet válido (com <literal>@URL</literal>). | |
| 486 | - </para> | |
| 487 | - </callout> | |
| 488 | - </calloutlist> | |
| 489 | - </programlistingco> | |
| 490 | - <tip> | |
| 491 | 140 | <para> |
| 492 | - Validações de campos específicos para a comunidade brasileira são oferecidos pelo componente | |
| 493 | - <emphasis>Demoiselle Validation</emphasis>. Com ele, as seguintes anotações podem ser aplicadas nas | |
| 494 | - classes de domínio: <literal>@Cep</literal>, <literal>@Cnpj</literal>, <literal>@Cpf</literal>, | |
| 495 | - <literal>@InscricaoEstadual</literal> e <literal>@PisPasep</literal>. | |
| 141 | + A fim de testarmos mais essa funcionalidade, utilizaremos a implementação de validação | |
| 142 | + <emphasis>Hibernate Validator</emphasis>. Para tal, abra o arquivo <filename>pom.xml</filename> | |
| 143 | + do projeto <literal>bookmark</literal> e inclua nele a seguinte dependência: | |
| 496 | 144 | </para> |
| 497 | - </tip> | |
| 498 | - <para> | |
| 499 | - Assim que você efetuar as modificações, reconstrua o projeto Java e faça novo deploy no servidor de | |
| 500 | - aplicações. Acesse a aplicação <literal>bookmark</literal> e, na tela de edição de bookmarks, deixe | |
| 501 | - vazios os campos no formulário e clique em <guibutton>Salvar</guibutton>. Tente também preencher um | |
| 502 | - endereço de Internet inválido no campo <literal>Link</literal>. Caixas de erro com as mensagens | |
| 503 | - referentes as validações devem aparecer ao lado de cada campo, tal como ilustrado: | |
| 504 | - </para> | |
| 505 | - <figure> | |
| 506 | - <title>Validação de campos na aplicação Bookmark</title> | |
| 507 | - <mediaobject> | |
| 508 | - <imageobject role="fo"> | |
| 509 | - <imagedata fileref="images/appvalid.png" align="center" scalefit="1" /> | |
| 510 | - </imageobject> | |
| 511 | - <imageobject role="html"> | |
| 512 | - <imagedata fileref="images/appvalid.png" align="center" /> | |
| 513 | - </imageobject> | |
| 514 | - <textobject> | |
| 515 | - <phrase>Aplicação Bookmark em funcionamento</phrase> | |
| 516 | - </textobject> | |
| 517 | - </mediaobject> | |
| 518 | - </figure> | |
| 519 | - <tip> | |
| 145 | + <programlisting role="XML"> | |
| 146 | + <![CDATA[<dependencies> | |
| 147 | + ... | |
| 148 | + <dependency> | |
| 149 | + <groupId>org.hibernate</groupId> | |
| 150 | + <artifactId>hibernate-validator</artifactId> | |
| 151 | + <version>4.3.0.Final</version> | |
| 152 | + </dependency> | |
| 153 | + </dependencies>]]> | |
| 154 | + </programlisting> | |
| 155 | + <note> | |
| 156 | + <para> | |
| 157 | + O objetivo dessa abordagem de validação é auxiliar na criação de restrições diretamente nas | |
| 158 | + entidades de domínio. Tais restrições serão utilizadas de forma conjunta nas camadas de | |
| 159 | + persistência e apresentação da aplicação. A vantagem é que elas são facilmente configuráveis, | |
| 160 | + bastando apenas incluir certas anotações (ex: <literal>@NotNull</literal>, <literal>@Size</literal>) | |
| 161 | + nos campos da classe a ser validada. | |
| 162 | + </para> | |
| 163 | + </note> | |
| 164 | + <para> | |
| 165 | + No pacote <literal>br.gov.frameworkdemoiselle.sample.bookmark.domain</literal> altere a entidade de domínio | |
| 166 | + <literal>Bookmark</literal> incluindo as anotações de validação nos campos <literal>description</literal> | |
| 167 | + e <literal>link</literal> conforme ilustrado a seguir: | |
| 168 | + </para> | |
| 169 | + <programlistingco> | |
| 170 | + <areaspec> | |
| 171 | + <area id="valid-desc" coords="9"/> | |
| 172 | + <area id="valid-link" coords="14"/> | |
| 173 | + </areaspec> | |
| 174 | + <programlisting role="JAVA"> | |
| 175 | + <![CDATA[@Entity | |
| 176 | + public class Bookmark { | |
| 177 | + | |
| 178 | + @Id | |
| 179 | + @GeneratedValue | |
| 180 | + private Long id; | |
| 181 | + | |
| 182 | + @Column | |
| 183 | + @NotNull | |
| 184 | + @Size(min = 1, max = 30) | |
| 185 | + private String description; | |
| 186 | + | |
| 187 | + @Column | |
| 188 | + @NotNull | |
| 189 | + @NotBlank | |
| 190 | + @Size(max = 255) | |
| 191 | + @URL | |
| 192 | + private String link; | |
| 193 | + | |
| 194 | + ... | |
| 195 | + }]]> | |
| 196 | + </programlisting> | |
| 197 | + <calloutlist> | |
| 198 | + <callout arearefs="valid-desc"> | |
| 199 | + <para> | |
| 200 | + No campo <literal>description</literal>, a anotação <literal>@NotNull</literal> serve | |
| 201 | + para impedir que o valor nulo seja atribuído a ele. Já a anotação <literal>@Size</literal> | |
| 202 | + restringe a quantidade mínima e máxima de caracteres no campo. | |
| 203 | + </para> | |
| 204 | + </callout> | |
| 205 | + <callout arearefs="valid-link"> | |
| 206 | + <para> | |
| 207 | + No campo <literal>link</literal> mais restrições são aplicadas. Além de não permitir o valor | |
| 208 | + nulo (com <literal>@NotNull</literal>) e estipular o comprimento máximo de 255 caracteres | |
| 209 | + (com <literal>@Size</literal>), o campo não pode ficar vazio (com <literal>@NotBlank</literal>) | |
| 210 | + e seu conteúdo deve ser um endereço de Internet válido (com <literal>@URL</literal>). | |
| 211 | + </para> | |
| 212 | + </callout> | |
| 213 | + </calloutlist> | |
| 214 | + </programlistingco> | |
| 215 | + <tip> | |
| 216 | + <para> | |
| 217 | + Validações de campos específicos para a comunidade brasileira são oferecidos pelo componente | |
| 218 | + <emphasis>Demoiselle Validation</emphasis>. Com ele, as seguintes anotações podem ser aplicadas nas | |
| 219 | + classes de domínio: <literal>@Cep</literal>, <literal>@Cnpj</literal>, <literal>@Cpf</literal>, | |
| 220 | + <literal>@InscricaoEstadual</literal> e <literal>@PisPasep</literal>. | |
| 221 | + </para> | |
| 222 | + </tip> | |
| 520 | 223 | <para> |
| 521 | - As mensagens exibidas na tela durante a validação estão contidas no arquivo de | |
| 522 | - recursos <filename>ValidationMessages.properties</filename> presente no diretório | |
| 523 | - <filename>/src/main/resources/</filename>. | |
| 224 | + Assim que você efetuar as modificações, reconstrua o projeto Java e faça novo deploy no servidor de | |
| 225 | + aplicações. Acesse a aplicação <literal>bookmark</literal> e, na tela de edição de bookmarks, deixe | |
| 226 | + vazios os campos no formulário e clique em <guibutton>Salvar</guibutton>. Tente também preencher um | |
| 227 | + endereço de Internet inválido no campo <literal>Link</literal>. Caixas de erro com as mensagens | |
| 228 | + referentes as validações devem aparecer ao lado de cada campo, tal como ilustrado: | |
| 524 | 229 | </para> |
| 525 | - </tip> | |
| 230 | + <figure> | |
| 231 | + <title>Validação de campos na aplicação Bookmark</title> | |
| 232 | + <mediaobject> | |
| 233 | + <imageobject role="fo"> | |
| 234 | + <imagedata fileref="images/appvalid.png" align="center" scalefit="1" /> | |
| 235 | + </imageobject> | |
| 236 | + <imageobject role="html"> | |
| 237 | + <imagedata fileref="images/appvalid.png" align="center" /> | |
| 238 | + </imageobject> | |
| 239 | + <textobject> | |
| 240 | + <phrase>Aplicação Bookmark em funcionamento</phrase> | |
| 241 | + </textobject> | |
| 242 | + </mediaobject> | |
| 243 | + </figure> | |
| 244 | + <tip> | |
| 245 | + <para> | |
| 246 | + As mensagens exibidas na tela durante a validação estão contidas no arquivo de | |
| 247 | + recursos <filename>ValidationMessages.properties</filename> presente no diretório | |
| 248 | + <filename>/src/main/resources/</filename>. | |
| 249 | + </para> | |
| 250 | + </tip> | |
| 526 | 251 | </section> |
| 527 | - | |
| 252 | + | |
| 528 | 253 | </chapter> |
| 529 | 254 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" | |
| 3 | + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []> | |
| 4 | + <preface> | |
| 5 | + <title>Sobre o QuickStart</title> | |
| 6 | + <para> | |
| 7 | + Este documento é um tutorial do tipo "passo a passo" que visa ilustrar de forma rápida, clara e prática a criação | |
| 8 | + de uma aplicação simples utilizando o <emphasis>Demoiselle Framework 2.3</emphasis>. | |
| 9 | + </para> | |
| 10 | + <note> | |
| 11 | + <para> | |
| 12 | + Apesar de o <emphasis>Demoiselle Framework 2.3</emphasis> ser simples de usar, o desenvolvimento de aplicações | |
| 13 | + não triviais requer o conhecimento das diversas tecnologias envolvidas na especificação | |
| 14 | + <emphasis>Java EE</emphasis>, incluindo: | |
| 15 | + <itemizedlist> | |
| 16 | + <listitem>Linguagem Java</listitem> | |
| 17 | + <listitem>Servlets, JSP e Tag Libraries</listitem> | |
| 18 | + <listitem>JavaBeans</listitem> | |
| 19 | + <listitem>HTML e XML</listitem> | |
| 20 | + <listitem>Contêineres e Servidores Web</listitem> | |
| 21 | + </itemizedlist> | |
| 22 | + </para> | |
| 23 | + </note> | |
| 24 | + <note> | |
| 25 | + <para> | |
| 26 | + Esta documentação refere-se à release 2.3 do <emphasis>Demoiselle Framework</emphasis> e pode diferir | |
| 27 | + significativamente das versões anteriores. | |
| 28 | + </para> | |
| 29 | + </note> | |
| 30 | + </preface> | |
| 0 | 31 | \ No newline at end of file | ... | ... |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrapTest.java
| ... | ... | @@ -14,7 +14,7 @@ |
| 14 | 14 | // * GNU General Public License for more details. |
| 15 | 15 | // * |
| 16 | 16 | // * You should have received a copy of the GNU Lesser General Public License version 3 |
| 17 | -// * along with this program; if not, see <http://www.gnu.org/licenses/> | |
| 17 | +// * along with this program; if not, see <http:www.gnu.org/licenses/> | |
| 18 | 18 | // * or write to the Free Software Foundation, Inc., 51 Franklin Street, |
| 19 | 19 | // * Fifth Floor, Boston, MA 02110-1301, USA. |
| 20 | 20 | // * ---------------------------------------------------------------------------- |
| ... | ... | @@ -30,7 +30,7 @@ |
| 30 | 30 | // * para maiores detalhes. |
| 31 | 31 | // * |
| 32 | 32 | // * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título |
| 33 | -// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | |
| 33 | +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http:www.gnu.org/licenses/> | |
| 34 | 34 | // * ou escreva para a Fundação do Software Livre (FSF) Inc., |
| 35 | 35 | // * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. |
| 36 | 36 | // */ | ... | ... |
impl/extension/servlet/src/test/java/br/gov/frameworkdemoiselle/internal/proxy/HttpServletRequestProxyTest.java
0 → 100644