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 5 and version 4:

At line 90 changed 2 lines.
!!Create PersonActionTest to test PersonAction [#3]
To create a StrutsTestCase Test for PersonAction, start by creating a PersonActionTest.java file in the test/web/**/action directory:
!!Criar a classe PersonActionTest para testar PersonAction [#3]
Para criar um teste StrutsTestCase para PersonAction, comece criando um arquivo PersonActionTest.java no diretório test/web/**/action:
At line 131 changed 1 line.
// update the form from the edit and add it back to the request
// altera o form da edição e o adiciona novamente à requisição
At line 153 changed 1 line.
You will need to add __PERSON_KEY__ as a variable to the src/dao/**/Constants.java class. The name, "personForm", matches the name given to the form in the struts-config.xml file.
Será necessário adicionar __PERSON_KEY__ como uma variável na classe src/dao/**/Constants.java . O nome, "personForm", combina com o nome dado ao form no arquivo struts-config.xml.
At line 158 changed 1 line.
* The request scope attribute that holds the person form.
* O atributo de escopo de requisição que mantém o formulário da pessoa.
At line 163 changed 1 line.
If you try to run this test, you will get a number of NoSuchMethodErrors - so let's define the edit, save, and delete methods in the PersonAction class.
Se tentarmos executar este teste, teremos muitos NoSuchMethodErrors - então vamos definir os métodos edit, save, e delete na classe PersonAction.
At line 165 changed 1 line.
!!Create PersonAction [#4]
!!Criar a classe PersonAction [#4]
At line 167 changed 1 line.
In src/web/**/action, create a PersonAction.java file with the following contents:
Em src/web/**/action, crie um arquivo PersonAction.java com o seguinte conteúdo:
At line 204 changed 1 line.
log.debug("Entering 'delete' method");
log.debug("Entrando no método 'delete'");
At line 210 changed 1 line.
// Exceptions are caught by ActionExceptionHandler
// Exceções são pegas pelo ActionExceptionHandler
At line 217 changed 1 line.
// save messages in session, so they'll survive the redirect
// salva a mensagem na sessão para ela sobreviver ao redirecionamento
At line 228 changed 1 line.
log.debug("Entering 'edit' method");
log.debug("Entrando no método 'edit'");
At line 233 changed 2 lines.
// if an id is passed in, look up the user - otherwise
// don't do anything - user is doing an add
// se um id é passado, procura o objeto Person - senão
// não faz nada - o usuário está fazendo uma adição
At line 250 changed 1 line.
log.debug("Entering 'save' method");
log.debug("Entrando no método 'save'");
At line 253 changed 1 line.
// Extract attributes and parameters we will need
// Extraindo atributos e parâmetros que iremos precisar
At line 259 changed 1 line.
log.debug("saving person: " + personForm);
log.debug("salvando person: " + personForm);
At line 266 changed 1 line.
// add success messages
// adiciona as mensagens de sucesso
At line 271 changed 1 line.
// save messages in session to survive a redirect
// salva a mensagem de sucesso na sessão, para sobreviver ao redirecionamento
At line 286 changed 2 lines.
You'll notice in the code above that there are many calls to to ''convert'' a PersonForm or a Person object. The ''convert'' method is in BaseAction.java (which calls ConvertUtil.convert()) and
uses
Perceba que o código acima possui várias chamadas a um método ''convert'' para um PersonForm ou para um objeto Person. O método ''convert'' está na classe BaseAction.java (que chama ConvertUtil.convert()) e
usa
At line 289 changed 1 line.
to convert POJOs → ActionForms and ActionForms → POJOs.
para a conversão POJOs → ActionForms e ActionForms → POJOs.
At line 291 changed 1 line.
;:''If you are running Eclipse, you might have to "refresh" the project in order to see PersonForm. It lives in build/web/gen, which should be one of your project's source folders. This is the only way for Eclipse to see and import PersonForm, since it is generated by XDoclet and does not live in your regular source tree. You can find it at build/web/gen/org/appfuse/webapp/form/PersonForm.java.''
;:''Se utilizarmos Eclipse, devemos atualizar ("refresh") o projeto para poder ver o PersonForm. Ele está em build/web/gen, que é uma das pastas de código do projeto. Esta é a única maneira do Eclipse ver e importar PersonForm, pela razão desta classe ser gerada pelo XDoclet e não pertencer à árvore normal de pastas de código do projeto. Podemos encontrar esta classe em build/web/gen/org/appfuse/webapp/form/PersonForm.java.''
At line 293 changed 1 line.
;:''In [BaseAction|http://raibledesigns.com/downloads/apptracker/api/org/appfuse/webapp/action/BaseAction.java.html] you can register additional Converters (i.e. [DateConverter|http://raibledesigns.com/downloads/apptracker/api/org/apptracker/util/DateConverter.java.html]) so that BeanUtils.copyProperties knows how to convert Strings → Objects. If you have Lists on your POJOs (i.e. for parent-child relationships), you will need to manually convert those using the {{convertLists(java.lang.Object)}} method.''
;:''Na classe [BaseAction|http://raibledesigns.com/downloads/apptracker/api/org/appfuse/webapp/action/BaseAction.java.html] podemos registrar conversores adicionais (i.e. [DateConverter|http://raibledesigns.com/downloads/apptracker/api/org/apptracker/util/DateConverter.java.html]) para que o BeanUtils.copyProperties saiba como fazer a conversão Strings → Objects. Se temos Lists em nossos POJOs (i.e. para relacionamentos pai-filho), teremos que converter manualmente estes utilizando o método {{convertLists(java.lang.Object)}}.''
At line 295 changed 1 line.
Now you need to add the ''edit'' forward and the ''savePerson'' action-mapping, both which are specified in in the PersonActionTest. To do this, add a couple more XDoclet tags to the top of the PersonAction.java file. Do this right above the class declaration. You should already have the XDoclet tag for the ''editPerson'' action-mapping, but I'm showing it here so you can see all the XDoclet tags at the top of this class.
Agora temos que adicionar os action-mapping de envio ''edit'' e ''savePerson'', ambos especificados em PersonActionTest. Para fazê-lo, adicionaremos algumas tags XDoclet na parte superior do arquivo PersonAction.java. Devemos fazer isto logo acima da declaração de classe. Já devemos ter a tag XDoclet para o action-mapping ''editPerson'', mas o mostrarei aqui para que todos possamos ver todas as tag XDoclet na parte superior da classe.
At line 311 changed 1 line.
The main difference between the ''editPerson'' and ''savePerson'' action-mappings is that ''savePerson'' has validation turned on (see validation="true") in the XDoclet tag above. Note that the "input" attribute must refer to a forward, and cannot be a path (i.e. /editPerson.html). If you'd prefer to use the save path for both edit and save, that's possible too. Just make sure validate="false", and then in your "save" method - you'll need to call form.validate() and handle errors appropriately.
A maior diferença entre os action-mappings ''editPerson'' e ''savePerson'' é que ''savePerson'' possui a validação ligada (veja validation="true") na tag XDoclet acima. Note que o atributo "input" deve se referir a um envio, não podendo ser um caminho(i.e. /editPerson.html). Se preferirmos utilizar o caminho para salvar tanto para edição quanto para persistência, isto é possível também. Apenas devemos nos certificar que o validate="false", e que no método "save" - devemos chamar form.validate() e tratar os erros adequadamente.
At line 313 changed 1 line.
You might notice that the code you're using to call the PersonManager is the same as the code used in the PersonManagerTest. Both PersonAction and PersonManagerTest are ''clients'' of PersonManagerImpl, so this makes perfect sense.
Você perceberá que o código que estamos utilizando para chamar o PersonManager é o mesmo código utilizado em PersonManagerTest. Tanto PersonAction quanto PersonManagerTest são ''clientes'' de PersonManagerImpl, então isto faz sentido perfeitamente.
At line 315 changed 1 line.
Everything is almost done for this tutorial, let's get to running the tests!
Tudo está quase pronto neste tutorial, vamos então rodar os testes!
At line 317 changed 1 line.
!!Run PersonActionTest [#5]
!!Rodar PersonActionTest [#5]
At line 319 changed 1 line.
If you look at our PersonActionTest, all the tests depend on having a record with id=1 in the database (and testRemove depends on id=2), so add that to our sample data file (metadata/sql/sample-data.xml). I'd add it at the bottom - order is not important since it (currently) does not relate to any other tables.
Se olharmos ao nosso PersonActionTest, todos os testes dependem da tupla com o id=1 no banco de dados (e o testRemove depende do id=2), então adicione ao nosso arquivo de amostra de dados (metadata/sql/sample-data.xml). Eu adicionaria ao final do arquivo - ordem não é importante porque (atualmente) não se relaciona com outras tabelas.
At line 339 changed 1 line.
DBUnit loads this file before we run any of our tests, so this record will be available to the PersonActionTest.
O DBUnit carrega este arquivo antes de rodar qualquer teste nosso, então estas tuplas serão disponíveis para o PersonActionTest.
At line 341 changed 1 line.
Now if you run __ant test-web -Dtestcase=PersonAction__ - everything should work as planned. Make sure Tomcat isn't running before you try this.
Agora se rodarmos __ant test-web -Dtestcase=PersonAction__ - tudo deve rodar como planejado. Certifique-se que o Tomcat não está rodando antes de tentar isto.

Back to CreateActions_pt, or to the Page History.