Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
Articles
Articles_pt
CreateManager_pt
ValidationAndList_pt




JSPWiki v2.2.33

[RSS]


Hide Menu

CreateActions_pt


Difference between version 9 and version 5:

At line 6 changed 1 line.
Este tutorial vai lhe mostrar como criar Actions Struts, um teste JUnit (utilizando [StrutsTestCase|http://strutstestcase.sourceforge.net/]), e um JSP para o formulário. A Action que criaremos se comunicará com o PersonManager criado no tutorial [Criando Managers|CreateManager_pt].
Este tutorial vai lhe mostrar como criar Actions Struts, um teste JUnit (utilizando [StrutsTestCase|http://strutstestcase.sourceforge.net/]), e um JSP para o formulário.
A Action que criaremos se comunicará com o PersonManager criado no tutorial [Criando Managers|CreateManager_pt].
At line 8 changed 1 line.
Por default, o AppFuse disponibiliza o [Struts|http://struts.apache.org] como seu framework web. Desde a versão 1.6+, podemos utilizar [Spring|http://www.springframework.org] ou [WebWork|http://opensymphony.org/webwork] como framework web. Na versão 1.7, foi adicionado suporte à utilização do [JSF|http://myfaces.apache.org] ou [Tapestry|http://jakarta.apache.org/tapestry].
Por default, o AppFuse disponibiliza o [Struts|http://struts.apache.org] como seu framework web.
Desde a versão 1.6+, podemos utilizar [Spring|http://www.springframework.org] ou [WebWork|http://opensymphony.org/webwork] como framework web.
Na versão 1.7, foi adicionado suporte à utilização do [JSF|http://myfaces.apache.org] ou [Tapestry|http://jakarta.apache.org/tapestry].
At line 10 changed 1 line.
Para instalar qualquer destes frameworks web ao invés de Struts, simplesmente devemos navegar para o diretório ''extras'' e entrar no diretório do framework que desejamos instalar. O arquivo README.txt deste diretório possui instruções mais detalhadas. Os tutoriais para estes frameworks estão listados abaixo.
Para instalar qualquer destes frameworks web ao invés de Struts, simplesmente devemos navegar para o diretório ''extras'' e entrar no diretório do framework que desejamos instalar.
O arquivo README.txt deste diretório possui instruções mais detalhadas.
Os tutoriais para estes frameworks estão listados abaixo.
At line 31 changed 1 line.
Agora vamos gerar nosso objeto PersonForm para Struts e nossa camada web. Para fazê-lo, é necessário adicionar tags XDoclet à classe Person.java para criar nosso ActionForm Struts. No JavaDoc para o arquivo Person.java, adicione as seguintes tags @struts.form (verifique o arquivo User.java se necessita de exemplos):
Agora vamos gerar nosso objeto PersonForm para Struts e nossa camada web.
Para fazê-lo, é necessário adicionar tags XDoclet à classe Person.java para criar nosso ActionForm Struts. No JavaDoc para o arquivo Person.java, adicione as seguintes tags @struts.form (verifique o arquivo User.java se necessita de exemplos):
At line 349 added 1 line.
At line 346 changed 1 line.
!!Clean up the JSP to make it presentable [#6]
!!Formatar o JSP para deixá-lo apresentável [#6]
At line 348 changed 1 line.
Now let's clean up the generated personForm.jsp. Change the ''action'' of the <html:form> to be "savePerson" so validation will be turned on when saving. Also, change the ''focus'' attribute from focus="" to focus="firstName" so the cursor will be in the firstName field when the page loads (this is done with JavaScript).
Agora vamos "limpar" o personForm.jsp gerado. Mudaremos o atributo ''action'' do <html:form> para "savePerson" para ligar a validação quanto formos persistir. Mudaremos também o atributo ''focus'' de focus="" para focus="firstName" para o cursor estar no campo firstName quanto a página carregar (isto é feito via Javascript).
At line 350 changed 1 line.
Now if you execute __ant db-load deploy__, start Tomcat and point your browser to [http://localhost:8080/appfuse/editPerson.html?id=1], you should see something like this:
Outra coisa que devemos fazer é retirar os comentários das seguintes linhas no final do arquivo personForm.jsp. Isto é porque o Validator irá disparar uma exceção caso um nome de formulário for especificado no Validator e nenhuma regra de validação existir para ele.
At line 359 added 9 lines.
;:''Pessoalmente, eu acho isto um [bug|http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27316], mas os commiters do Struts não concordam.''
{{{<html:javascript formName="personForm" cdata="false"
dynamicJavascript="true" staticJavascript="false"/>
<script type="text/javascript"
src="<html:rewrite page="/scripts/validator.jsp"/>"></script>}}}
Agora se executarmos __ant db-load deploy__, iniciarmos o Tomcat e apontarmos o browser para [http://localhost:8080/appfuse/editPerson.html?id=1], veremos algo como:
At line 356 removed 1 line.
%%note __NOTE:__ Use the __deploy-web__ target if you've changed any files under the ''web'' directory. Otherwise, use __deploy__ which compiles and deploys.%%
At line 358 changed 1 line.
Finally, to make this page more user friendly, you may want to add a message for your users at the top of the form, which can easily be done by adding text (using &lt;fmt:message&gt;) at the top of the personForm.jsp page.
%%note __NOTA:__ Utilize o alvo(target) __deploy-web__ se foram alterados apenas arquivos do diretórios ''web''. Senão, use __deploy__ que compila e publica.%%
At line 360 changed 2 lines.
!![[Optional] Create a Canoo WebTest to test browser-like actions [#7]
The final (optional) step in this tutorial is to create a [Canoo WebTest|http://webtest.canoo.com] to test the JSPs.
Finalmente, para tornarmos a página mais amigável, poderemos adicionar mensagens aos nossos usuários na parte superior do formulário, o que podemos fazer facilmente adicionando texto (utilizando &lt;fmt:message&gt;) na parte superior da página personForm.jsp.
At line 363 changed 1 line.
;:''I say this step is optional, because you can run the same tests through your browser.''
!![[Opcional] Criar WebTests Canoo para testar ações baseadas no browser [#7]
A parte final (opcional) para este tutorial é criar um [Canoo WebTest|http://webtest.canoo.com] para testar os JSPs.
At line 365 changed 1 line.
You can use the following URLs to test the different actions for adding, editing and saving a user.
;:''Digo que estes testes são opcionais, porque podemos rodar os mesmos testes no browser.''
At line 367 changed 4 lines.
* Add - [http://localhost:8080/appfuse/editPerson.html].
* Edit - [http://localhost:8080/appfuse/editPerson.html?id=1] (make sure and run __ant db-load__ first).
* Delete - [http://localhost:8080/appfuse/editPerson.html?method=Delete&amp;id=1] (or edit and click on the Delete button).
* Save - Click [edit|http://localhost:8080/appfuse/editPerson.html?id=1] and then click the Save button.
Podemos utilizar as seguintes URLs para testar as diferentes ações para adicionar, editar e persistir um Person.
At line 372 changed 1 line.
Canoo tests are pretty slick in that they're simply configured in an XML file. To add tests for add, edit, save and delete, open test/web/web-tests.xml and add the following XML. You'll notice that this fragment has a target named ''PersonTests'' that runs all the related tests.
* Adicionar - [http://localhost:8080/appfuse/editPerson.html].
* Editar - [http://localhost:8080/appfuse/editPerson.html?id=1] (make sure and run __ant db-load__ first).
* Remover - [http://localhost:8080/appfuse/editPerson.html?method=Delete&amp;id=1] (ou edite e clique no botão de remoção).
* Salvar - Acesse [edit|http://localhost:8080/appfuse/editPerson.html?id=1] e então clique o botão 'Salvar'.
At line 374 changed 1 line.
;:''I use CamelCase target names (vs. the traditional lowercase, dash-separated) because when you're typing ''-Dtestcase=Name'', I've found that I'm used to doing CamelCase for my JUnit Tests.''
Testes Canoo são simples, configurados apenas por um arquivo XML. Para adicionarmos testes para as operações CRUD(add, edit, save e delete), abriremos test/web/web-tests.xml e adicionaremos o seguinte XML. Note que este fragmento possui um alvo(target) nomeado ''PersonTests'' que executa todos os testes relacionados.
At line 391 added 2 lines.
;:''Utilizo notação composta(CamelCase) para os nomes de alvos (target)(vs. letras minúsculas tradicionais, separadas por hífen) por causa das execuções utilizando o JUnit, como por exemplo, ''-Dtestcase=Name'', Percebi que estou acostumado com a notação composta para meus testes JUnit.''
At line 378 changed 1 line.
<!-- runs person-related tests -->
<!-- roda os testes relacionados com Person -->
At line 381 changed 2 lines.
description="Call and executes all person test cases (targets)">
<echo>Successfully ran all Person JSP tests!</echo>
description="Chama e executa todos os casos de teste relacionados com Person (targets)">
<echo>Rodou todos os testes JSP de Person com sucesso!</echo>
At line 385 changed 1 line.
<!-- Verify the edit person screen displays without errors -->
<!-- Verifica se a tela de edição da pessoa mostra sem erros -->
At line 387 changed 1 line.
description="Tests editing an existing Person's information">
description="Testa a edição das informações de uma pessoa existente">
At line 392 changed 2 lines.
<invoke description="click Edit Person link" url="/editPerson.html?id=1"/>
<verifytitle description="we should see the personDetail title"
<invoke description="clica no link de edição de pessoa" url="/editPerson.html?id=1"/>
<verifytitle description="devemos ver o título do personDetail"
At line 399 changed 1 line.
<!-- Edit a person and then save -->
<!-- Edita a pessoa e então salva -->
At line 401 changed 1 line.
description="Tests editing and saving a user">
description="Testes editando e salvando a pessoa">
At line 406 changed 2 lines.
<invoke description="click Edit Person link" url="/editPerson.html?id=1"/>
<verifytitle description="we should see the personDetail title"
<invoke description="clica no link de edição de pessoas" url="/editPerson.html?id=1"/>
<verifytitle description="devemos ver o título da edição de pessoas"
At line 409 changed 3 lines.
<setinputfield description="set lastName" name="lastName" value="Canoo"/>
<clickbutton label="Save" description="Click Save"/>
<verifytitle description="Page re-appears if save successful"
<setinputfield description="seta o último nome" name="lastName" value="Canoo"/>
<clickbutton label="Save" description="Clica no botão Save"/>
<verifytitle description="A página reaparece se tudo ocorreu com sucesso"
At line 413 changed 1 line.
<verifytext description="verify success message" text="${person.updated}"/>
<verifytext description="verifica a mensagem de sucesso" text="${person.updated}"/>
At line 418 changed 1 line.
<!-- Add a new Person -->
<!-- Adiciona uma nova Pessoa -->
At line 420 changed 1 line.
description="Adds a new Person">
description="Adiciona uma nova Pessoa">
At line 425 changed 2 lines.
<invoke description="click Add Button" url="/editPerson.html"/>
<verifytitle description="we should see the personDetail title"
<invoke description="clica no botão de Adição" url="/editPerson.html"/>
<verifytitle description="deveremos ver o título do detalhamento da pessoa"
At line 428 changed 4 lines.
<setinputfield description="set firstName" name="firstName" value="Abbie"/>
<setinputfield description="set lastName" name="lastName" value="Raible"/>
<clickbutton label="${button.save}" description="Click button 'Save'"/>
<verifytitle description="Main Menu appears if save successful"
<setinputfield description="seta o firstName" name="firstName" value="Abbie"/>
<setinputfield description="seta o lastName" name="lastName" value="Raible"/>
<clickbutton label="${button.save}" description="Clica no botão 'Salvar'"/>
<verifytitle description="O menu principal reaparece se tudo ocorreu com sucesso"
At line 433 changed 1 line.
<verifytext description="verify success message" text="${person.added}"/>
<verifytext description="verifica a mensagem de sucesso" text="${person.added}"/>
At line 438 changed 1 line.
<!-- Delete existing person -->
<!-- Deleta uma pessoa existente -->
At line 440 changed 1 line.
description="Deletes existing Person">
description="Deleta uma pessoa existente">
At line 445 changed 4 lines.
<invoke description="click Edit Person link" url="/editPerson.html?id=1"/>
<clickbutton label="${button.delete}" description="Click button 'Delete'"/>
<verifytitle description="display Main Menu" text=".*${mainMenu.title}.*" regex="true"/>
<verifytext description="verify success message" text="${person.deleted}"/>
<invoke description="clica no link de edição da pessoa" url="/editPerson.html?id=1"/>
<clickbutton label="${button.delete}" description="Clica no botão 'Deletar'"/>
<verifytitle description="Mostra o menu principal se tudo ocorreu com sucesso" text=".*${mainMenu.title}.*" regex="true"/>
<verifytext description="verifica a mensagem de sucesso" text="${person.deleted}"/>
At line 454 changed 1 line.
After adding this, you should be able to run __ant test-canoo -Dtestcase=PersonTests__ with Tomcat running or __ant test-jsp -Dtestcase=PersonTests__ if you want Ant to start/stop Tomcat for you. To include the PersonTests when all Canoo tests are run, add it as a dependency to the "run-all-tests" target.
Após adicionar isto, seremos capazes de rodar __ant test-canoo -Dtestcase=PersonTests__ com o Tomcat rodando ou __ant test-jsp -Dtestcase=PersonTests__ se quisermos que o Ant inicialize e pare o Tomcat. Para incluir o PersonTests quando todos os testes canoo são executados, adicionaremos sua dependência ao alvo(target) "run-all-tests".
At line 456 changed 1 line.
You'll notice that there's no logging in the client-side window by Canoo. If you'd like to see what it's doing, you can add the following between &lt;/webtest&gt; and &lt;/target&gt; at the end of each target.
Você perceberá que não há registro(logging) na janela cliente do canoo. Se desejarmos ver o que o Canoo está fazendo, podemos adicionar o seguinte código entre &lt;/canoo&gt; e &lt;/target&gt; no final do alvo(target).
At line 468 changed 1 line.
''Next Up:'' __Part IV:__ [Adding Validation and List Screen|ValidationAndList] - Adding validation logic to the personForm so that firstName and lastName are required fields and adding a list screen to display all person records in the database.
''Próximo:'' __Parte IV:__ [Adicionando Validação e Tela de Listagem|ValidationAndList_pt] - Adicionando lógica de validação para o personForm para que o firstName e o lastName sejam campos obrigatórios, e adicionando uma tela de listagem para mostrar todas as tuplas de pessoas no banco de dados.

Back to CreateActions_pt, or to the Page History.