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
CreateActions_it




JSPWiki v2.2.33

[RSS]


Hide Menu

ValidationAndList_it


Difference between version 7 and version 2:

At line 1 changed 1 line.
__Parte IV:__ [Aggiungere Convalida e Schermata Elenco|ValidationAndList_it] - Aggiungere un logica di convalida al PersonForm in modo che firstName e lastName siano campi obbligatori ed aggiungere una schermata di elenco per visualizzare tutti i record di tipo person nel database.
__Parte IV:__ [Aggiungere la Validazione ed una Schermata Elenco|ValidationAndList_it] - Aggiungere una logica di validazione al PersonForm in modo che firstName e lastName siano campi obbligatori ed aggiungere una schermata di elenco per visualizzare tutti i record di tipo person nel database.
At line 7 changed 1 line.
Questo tutorial ti mostrerà come aggiungere una logica di Convalida (sia lato client che server) all'oggetto PersonForm usando il Validator di Struts. Creeremo anche una schermata di elenco usando la [Display Tag Library|http://displaytag.sf.net] per visualizzare tutte le persone nel database.
Questo tutorial ti mostrerà come aggiungere una logica di Validazione (sia lato client che server) all'oggetto PersonForm usando il Validator di Struts. Creeremo anche una schermata di elenco usando la [Display Tag Library|http://displaytag.sf.net] per visualizzare tutte le persone nel database.
At line 13 changed 1 line.
* [2] Visualizza la JSP con la convalida aggiunta ed effettua un test
* [2] Visualizza la JSP con la validazione aggiunta ed effettua un test
At line 22 changed 1 line.
To use the Struts Validator, normally you have to write a validation.xml file by hand. If you're not using AppFuse, you also have to configure the Validator Plugin and error keys in your ApplicationResources.properties. For more information on this, see the [Validation Made Easy Tutorial|http://www.reumann.net/struts/lesson3/step8.do] (there's also a [rich set of tutorials|http://www.reumann.net/struts/main.do] for Struts itself).
Per usare il Validator di Struts, normalmente devi scrivere un file validation.xml a mano. Se non stai usando AppFuse, devi anche configurare il Plugin Validator e le chiavi degli errori nel tuo ApplicationResources.properties. Per ulteriori informazioni sull'argomento, vedi il [Tutorial Validation Made Easy|http://www.learntechnology.net/struts-lesson-3.do] (c'è anche un [ricco insieme di tutorial|http://www.learntechnology.net/struts-lesson-1.do] sul solo Struts).
At line 24 changed 1 line.
Thanks to XDoclet, it's much easier - you just need to add a couple of ''@struts.validator'' tags to the Person class. Open it up (src/dao/**/model/Person.java) and modify the getFirstName() and getLastName() methods to include ''@struts.validator type="required"'' tags.
Grazie ad XDoclet, è molto più semplice - devi solo aggiungere un paio di tag ''@struts.validator'' alla classe Person. Apri (src/dao/**/model/Person.java) e modifica i metodi getFirstName() e getLastName() in modo da includere i tag ''@struts.validator type="required"''.
At line 45 changed 1 line.
You can also add a ''msgkey'' attribute to this tag to override the default message key for this error.
Puoi anche aggiungere un attributo ''msgkey'' a questo tag per fornire una tua chiave in alternativa a quella di default per il messaggio associato a questo errore.
At line 52 changed 1 line.
The default key for type="required" is already ''errors.required'', so I usually leave it to the default. This key is defined in web/WEB-INF/classes/ApplicationResources_*.properties. You'll notice that we put these tags on the ''getters'' of this class even though the [XDoclet documentation|http://xdoclet.sourceforge.net/tags/apache-tags.html#@struts.validator%20(0..*)] says to put them on the setters. This is because we are generating our PersonForm.java - the template file (metadata/template/struts_form.xdt) takes care of putting these tags onto the setters in the generated file.
La chiave di default per type="required" è già ''errors.required'', pertanto io di solito la lascio al valore di default. Questa chiave viene specificata in web/WEB-INF/classes/ApplicationResources_*.properties. Come avrai notato, stiamo mettendo questi tag nei ''getter'' di questa classe per quanto la [documentazione di XDoclet|http://xdoclet.sourceforge.net/tags/apache-tags.html#@struts.validator%20(0..*)] dica di metterli nei ''setter''. Questo perché stiamo generando il nostro PersonForm.java - il file del modello (metadata/template/struts_form.xdt) si preoccupa di mettere questi tag sui ''setter'' nel file generato.
At line 54 changed 1 line.
Now if you save Person.java and run __ant clean webdoclet__, a validation.xml file will be generated in build/appfuse/WEB-INF/. Its contents should have now have an entry for "personForm".
Ora se registri Person.java ed esegui __ant clean webdoclet__, verrà generato un file validation.xml in build/appfuse/WEB-INF/. Il suo contenuto dovrebbe includere una voce per "personForm".
At line 72 changed 1 line.
Client-side validation is enabled by default in personForm.jsp. There is an <html:javascript> JSP tag and script at the bottom of this page that enables it. The following should already exist (thanks to AppGen) - but you might need to uncomment it if you commented it out in the last tutorial.
La validazione lato-client è attivata per default in personForm.jsp. C'è un tag JSP <html:javascript> ed uno script in fondo alla pagina che lo attiva. Ciò che segue dovrebbe esser già presente (grazie ad AppGen) - ma potresti aver bisogno di rimuovere il commento se avevi commentato il blocco nel file nel tutorial precedente.
At line 79 changed 1 line.
%%note __NOTE:__ If you have nested objects with validation rules, those will be picked up and put into validation.xml. This is because an @struts.validator tag gets added to the setter of the nested object when the form is generated (using metadata/templates/struts_form.xdt). If you have many-to-many bi-directional relationships between objects, this can cause a problem. There are two solutions to fix this. The first is to remove the @struts.validator tag from struts_form.xdt and manually place it on the setter in your POJO. The second is [described here|https://appfuse.dev.java.net/issues/show_bug.cgi?id=88].%%
%%note __NOTA:__ Se hai oggetti innestati con regole di validazione, verrano presi e messi nel validation.xml. Ciò avviene in quanto un tag @struts.validator viene aggiunto al setter dell'oggetto innestato quando viene generato il form (usando metadata/templates/struts_form.xdt). Se hai relazioni molti-a-molti bidirezionali fra oggetti, ciò potrebbe essere un problema. Ci sono due soluzioni per risolvere la questione. La prima è eliminare il tag @struts.validator tag da struts_form.xdt e posizionarlo a mano sul setter nel tuo POJO. La seconda viene [descritta qui|https://appfuse.dev.java.net/issues/show_bug.cgi?id=88].%%
At line 81 changed 1 line.
!!Visualizza la JSP con la convalida aggiunta ed effettua un test [#2]
!!Visualizza la JSP con la validazione aggiunta ed effettua un test [#2]
At line 83 changed 1 line.
Now that you have Validation configured for this form, whenever this form is used in an action-mapping with validate="true", these rules will be applied. In the [last tutorial|CreateActions], we added the "savePerson" action-mapping for PersonAction. The XDoclet tags for this action-mapping were:
Ora che hai configurato la Validazione per questo form, ogni volta che questo form viene usato in un action-mapping con validate="true", verranno applicate queste regole. Nell'[ultimo tutorial|CreateActions_it], abbiamo aggiunto l'action-mapping "savePerson" per la PersonAction. I tag XDoclet per questo action-mapping erano:
At line 91 changed 1 line.
So now, as long as your web/pages/personForm.jsp has <html:form action="savePerson">, validation should kick in when we try to save this form. Run __ant db-load deploy__, start Tomcat and go to [http://localhost:8080/appfuse/editPerson.html?id=1].
Pertanto ora, se la tua web/pages/personForm.jsp ha un <html:form action="savePerson">, dovrebbe intervenire la validazione ogni volta che proviamo ad inviare questo form. Esegui __ant db-load deploy__, avvia Tomcat e vai a [http://localhost:8080/appfuse/editPerson.html?id=1].
At line 93 changed 1 line.
If you erase the values in the firstName and lastName fields and click the save button, you should get the following JavaScript alert.
Se cancelli i valori nei campi firstName e lastName e fai clic sul pulsante registra, dovresti ottenere il seguente alert JavaScript.
At line 99 changed 1 line.
To make sure things are ''really'' working as expected, you can turn off JavaScript and ensure the server-side validation is working. This is easy in [Firefox|http://www.mozilla.org/products/firefox/] (my favorite browser), just go to Tools → Options → Web Features and uncheck "Enable JavaScript". Now if you clear the fields and save the form, you should see the following:
Per assicurarti che le cose funzionino ''davvero'' come previsto, puoi spegnere JavaScript e verificare se la validazione lato-server sta funzionando. Ciò è semplice in [Firefox|http://www.mozilla.org/products/firefox/] (il mio browser preferito), basta che vai in Strumenti → Preferenxe → Contenuto e deselezioni "Abilita JavaScript". Ora se cancelli i campi e invii il form, dovresti vedere il messaggio seguente:
At line 105 changed 1 line.
If you don't see these validation errors, there are a couple possibilities:
se non vedi questi errori di validazione, ci sono un paio di possibilità:
At line 107 changed 4 lines.
* The form saves with a success message, but the firstName and lastName fields are now blank.
;:''This is because the <html:form> in web/pages/personForm.jsp has action="editPerson" - make sure it has __action="savePerson"__.''
* You click save, but a blank page appears.
;:''The blank page indicates that the "input" attribute of you "savePerson" forward is incorrectly configured. Make sure it relates to a local or global action-forward. In this example, it should be __input="edit"__, which points to the .personDetail tile's definition. From my experience, the input's value must be a forward, not a path to an action.''
* Il form registra cin un messaggio di successo, ma i campi firstName e lastName sono ora vuoti.
;:''Questo perché l'<html:form> in web/pages/personForm.jsp ha action="editPerson" - controlla che abbia __action="savePerson"__.''
* Fai clic su registra, ma compare una pagina vuota.
;:''La pagina vuota indica che l'attributo "input" del tuo forward "savePerson" non è stato configurato correttamente. Controlla se si riferisca ad un action-forward locale o globale. In questo esempio, dovrebbe essre __input="edit"__, che punta alla definizione del tile .personDetail. Dalla mia esperienza, il valore di input dovrebbe essere un forward, non un path ad una action.''
At line 112 changed 1 line.
If you only want server-side validation (no JavaScript), you can remove the ''onsubmit'' attribute of <html:form> (in web/pages/personForm.jsp) as well as the Validator JavaScript tags at the bottom of the page.
Se vuoi la sola validazione lato server (niente JavaScript), puoi eliminare l'attributo ''onsubmit'' da <html:form> (in web/pages/personForm.jsp) come anche i tag JavaScript del Validator in fondo alla pagina.
At line 123 changed 1 line.
To create a List screen (also called a master screen), we need to create methods that will return all the rows from our ''person'' table. Let's start by adding tests for these methods to our PersonDaoTest and PersonManagerTest classes. I usually name this method ''getEntities'' (i.e. getUsers), but you could also use ''getAll'' or ''search'' - it's really just a matter of personal preference.
Per creare una schermata di Elenco (chiamata anche schermata master), dobbiamo creare dei metodi che restituiscano tutte le righe dall nostra tabella ''person''. Iniziamo con l'aggiungere i test per questi metodi alle nostre classi PersonDaoTest e PersonManagerTest. Di solito io chiamo questi metodi ''getEntities'' (i.e. getUsers), ma potresti usare anche ''getAll'' o ''search'' - è solo questione di preferenze personali.
At line 125 changed 1 line.
Open test/dao/**/dao/PersonDaoTest.java and add a ''testGetPeople'' method:
Apri test/dao/**/dao/PersonDaoTest.java ed agiungi un metodo ''testGetPeople'':
At line 136 changed 1 line.
The reason I'm passing in a person object to the ''getPeople'' method is to allow for filtering (based on values in person) in the future. Adding this parameter in your getPeople() method signature is optional, but the rest of this tutorial assumes you have done this.
Il motivo per cui sto passando un oggetto person al metodo ''getPeople'' è per permettere in futuro di filtrare il risultato (basandomi come criterio sui valori presenti in person). Aggiungere questo parametro alla firma del tuo metodo getPeople() è opzionale, ma il resto di questo tutorial assume tu lo abbia fatto.
At line 138 changed 1 line.
Now open test/service/**/service/PersonManagerTest.java and add a ''testGetPeople'' method:
Ora apri test/service/**/service/PersonManagerTest.java ed aggiungi un metodo ''testGetPeople'':
At line 157 changed 1 line.
In order for these tests to compile, you need to add the ''getPeople()'' method to the PersonDao and PersonManager interfaces, and their implementations.
Affinché questi test compilino, devi aggiungere il metodo ''getPeople()'' alle interfacce PersonDao e PersonManager, nonché alle relative implementazioni.
At line 160 changed 1 line.
Open src/dao/**/dao/PersonDao.java and add the getPeople() method signature:
Apri src/dao/**/dao/PersonDao.java ed aggiungi la firma del metodo getPeople():
At line 167 changed 1 line.
Now add the same method signature to src/service/**/service/__PersonManager.java__. Save all your files and adjust the imports in your tests. Next you need to implement the getPeople() method in your implementation classes. Open src/dao/**/dao/hibernate/PersonDaoHibernate.java and add the following method:
Ora aggiungi la medesima firma di metodo a src/service/**/service/__PersonManager.java__. Registra tutti i tuoi file e correggi gli import nei tuoi test. Come passo successivo devi implementare il metodo getPeople() nelle tue classi di implementazione. Apri src/dao/**/dao/hibernate/PersonDaoHibernate.java ed aggiungi il metodo seguente:
At line 177 changed 1 line.
You'll notice here that nothing is being done with the ''person'' parameter. This is just a placeholder for now - in the future you may want to filter on it's properties using [Hibernate's Query Language|http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html] (HQL) or using [Criteria Queries|http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html].
Noterai qui che che nulla è stato fatto con il parametro ''person''. Per il momento è solo un segnaposto - nel futuro potresti voler filtrare in base alle sue proprità usando il [Linguaggio di Query di Hibernate|http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html] (HQL) o le [Query per Criteri|http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html].
At line 179 changed 1 line.
''An example using a Criteria Query:''
''Un esempio che usa le Query per Criteri:''
At line 195 changed 1 line.
Now implement the ''getPeople()'' method in src/service/**/impl/PersonManagerImpl.java:
Ora implementa il metodo ''getPeople()'' in src/service/**/impl/PersonManagerImpl.java:
At line 204 changed 1 line.
After saving all your changes, you should be able to run both tests by executing the following:
Dopo aver registrato tutte le tue modifiche, dovresti essere in grado di eseguire entrambi i test eseguendo i seguenti comandi:
At line 209 changed 1 line.
If everything works - ''nice job!'' Now you need to add this ''retrieve all'' functionality to the web tier.
Se funziona tutto - ''ottimo lavoro!'' Ore devi aggiungere questa funzionalità di ''recupera tutto'' allo strato web.
At line 212 changed 1 line.
Open test/web/**/action/PersonActionTest.java and add the following method:
Apri test/web/**/action/PersonActionTest.java ed aggiungi il metodo seguente:
At line 228 changed 1 line.
This class will not compile until you add the PERSON_LIST variable to the src/dao/**/Constants.java file.
Questa classe non compilerà finché non aggiungi la variabile PERSON_LIST al file src/dao/**/Constants.java.
At line 230 changed 1 line.
;:%%(color: blue)''I usually copy a similar variable that already exists in this file - i.e. USER_LIST.''
;:%%(color: blue)''Di solito io copio una variabile analoga già esistente in questo file - i.e. USER_LIST.''
At line 240 changed 1 line.
Now save all your changes. You won't be able to run __ant test-web -Dtestcase=PersonAction__ yet since ''PersonAction.search()'' does not exist (yet).
Ora registra tutte le tue modifiche. Non puoi ancora eseguire __ant test-web -Dtestcase=PersonAction__ in quanto ''PersonAction.search()'' non esiste (per il momento).
At line 243 changed 1 line.
Open src/web/**/action/PersonAction.java and add the following XDoclet tag at the top - to forward to our list screen.
Apri src/web/**/action/PersonAction.java ed aggiungi il seguente tag XDoclet in cima - per impostare il forward alla nostra schermata di elenco.
At line 250 changed 1 line.
Now add the search method to the body of the PersonAction class.
Ora aggiungi il metodo search all'interno dell classe PersonAction.
At line 252 changed 1 line.
;:%%(color: blue)''I used UserAction.search() as a template for this method.''
;:%%(color: blue)''Ho utilizzato UserAction.search() come modello per questo metodo.''
At line 273 changed 1 line.
Run __ant test-web -Dtestcase=PersonAction__.
Esegui __ant test-web -Dtestcase=PersonAction__.
At line 275 changed 1 line.
__Nice!__
__Bene!__
At line 280 changed 1 line.
Open the personList.jsp file in ''web/pages''. You'll probably want to change the code to show the plural form of the items you're listing. The generated name in this example is "persons" and it should probably be people. At or near line 31, you should have the following line:
Apri il file personList.jsp in ''web/pages''. Molto probabilmente vorrai modificare il codice in modo da visualizzare la forma plurale degli elementi che stai elencando. Il nome generato in questo esempio è "persons" e probabilmente sarebbe meglio fosse people. Alla riga 31 o vicino ad essa, dovresti avere la seguente:
At line 284 changed 1 line.
Change it to:
Modificala in:
At line 288 changed 1 line.
Finally, add the title and heading keys (personList.title and personList.heading) to web/WEB-INF/classes/ApplicationResources.properties. Open this file and add the following:
Infine, aggiungi le chiavi per titolo ed intestazione (personList.title e personList.heading) a web/WEB-INF/classes/ApplicationResources.properties. Apri questo file ed aggiungi quanto segue:
At line 296 changed 2 lines.
As a reminder, the {{personList.title}} is what ends up in the brower's title bar (the <title> tag) and
{{personList.heading}} will be put into an &lth1> tag before any page content.
Come promemoria, il {{personList.title}} è ciò che finisce nella barra del titolo del tuo browser (il tah <title>) e
{{personList.heading}} verrà messo in un tag &lth1> prima di qualsiasi contenuto della pagina.
At line 299 changed 1 line.
At this point, you should be able to run __ant clean deploy__, start Tomcat and view this page in your browser at [http://localhost:8080/appfuse/editPerson.html?method=Search].
A questo punto, dovresti essere in grado di eseguire __ant clean deploy__, avvia Tomcat e vedi la pagina nel tuo browser su [http://localhost:8080/appfuse/editPerson.html?method=Search].
At line 301 changed 1 line.
Now that we have a List Screen, let's change the pages that are displayed after adding and deleting a new Person. In src/web/**/action/PersonAction.java, change the ''mapping.findForward("mainMenu")'' in the ''save'', ''delete'' and ''cancel'' methods to be:
Ora che abbiamo un Schermata Elenco, modifichiamo le pagine che sono visualizzate all'aggiunta di una nuova Person e alla sua eliminazione. In src/web/**/action/PersonAction.java, modifica il ''mapping.findForward("mainMenu")'' nei metodi ''save'', ''delete'' e ''cancel'' in modo che diventi:
At line 308 changed 1 line.
You will also need to change ''verifyForward("mainMenu")'' to be ''verifyForward("viewPeople")'' in the testRemove method of test/web/**/action/PersonActionTest.java. Lastly, the Canoo tests "AddPerson" and "DeletePerson" need to be updated. Open test/web/web-tests.xml and change the following line in the "AddPerson" target:
Devi anche modificare ''verifyForward("mainMenu")'' in ''verifyForward("viewPeople")'' nel metodo testRemove di test/web/**/action/PersonActionTest.java. Per ultimo, i test Canoo "AddPerson" e "DeletePerson" devono essere aggiornati. Apri test/web/web-tests.xml e modifica la seguente riga nel target "AddPerson":
At line 313 changed 1 line.
to:
in:
At line 318 changed 1 line.
Then in the "DeletePerson" target, change the following line:
Poi nel target "DeletePerson", modifca la seguente riga:
At line 324 changed 1 line.
to:
in:
At line 328 changed 1 line.
Finally, declare the viewPeople forward in metadata/web/global-forwards.xml after viewUsers as below:
Infine, dichiara il forward viewPeople in metadata/web/global-forwards.xml dopo viewUsers come qui sotto:
At line 332 changed 1 line.
The name "viewPeople" is used instead of "list" so that the search method will be executed, rather than simply forwarding to the personForm.jsp (which the "list" forward points to).
Il nome "viewPeople" viene usato al posto di "list" in modo che venga eseguito il metodo search, invece di effettuare un semplice forward alla personForm.jsp (cui punta il forward "list").
At line 334 changed 1 line.
To test that displaying this page works, create a new JSP test in test/web/web-tests.xml:
Per verificare che la visualizzazione di questa pagina funzioni, crea un nuovo test JSP in test/web/web-tests.xml:
At line 355 changed 1 line.
You'll also want to add the "SearchPeople" target to the "PersonTests" target so it will be executed along with all the other person-related tests.
Vorrai anche aggiungere il target "SearchPeople" al target "PersonTests" in modo che venga eseguito insieme agli altri test relativi a person.
At line 367 changed 1 line.
Now you can run __ant test-canoo -Dtestcase=SearchPeople__ (or ''ant test-jsp'' if Tomcat isn't running) and hopefully it will result in "BUILD SUCCESSFUL". If so - ''nice work!''
Ora puoi eseguire __ant test-canoo -Dtestcase=SearchPeople__ (o ''ant test-jsp'' se Tomcat non è in esecuzione) e sperabilmente otterrai come risultato un "BUILD SUCCESSFUL". Se è così - ''ottimo lavoro!''
At line 370 changed 1 line.
The last step is to make the list, add, edit and delete functions visible to the user. The simplest way is to add a new link to the list of links in web/pages/mainMenu.jsp:
L'ultimo passo è rendere visibili all'utente le funzioni di elenco, aggiunta, modifica ed eliminazione. Il modo più semplice è aggiungere un nuovo collegamento all'elenco di collegamenti in web/pages/mainMenu.jsp:
At line 373 changed 1 line.
%%note __NOTE:__ The other links in mainMenu.jsp don't use <html:link> so this JSP can be shared among the various web framework implementations in AppFuse (i.e. Spring MVC and WebWork).%%
%%note __NOTA:__ Gli altri collegamenti in mainMenu.jsp non usano <html:link> in modo che questa JSP possa essere condivisa fra le varie implementazioni di framework web usate in AppFuse (i.e. Spring MVC e WebWork).%%
At line 385 changed 1 line.
Where ''menu.viewPeople'' is an entry in web/WEB-INF/classes/ApplicationResources.properties.
Dove ''menu.viewPeople'' è una voce nel file web/WEB-INF/classes/ApplicationResources.properties.
At line 390 changed 1 line.
The other (more likely) alternative is that you'll want to add it to the menu. To do this, add the following to web/WEB-INF/menu-config.xml:
Un'alternativa (più probabile) è che tu voglia aggiungere questa voce al menu. Per far questo, aggiungi quanto segue a web/WEB-INF/menu-config.xml:
At line 397 changed 1 line.
Make sure the above XML is inside the &lt;Menus&gt; tag, but not within another &lt;Menu&gt;. Then add this new menu to web/common/menu.jsp - which should now look as follows:
Controlla che l'XML su indicato si trovi all'interno del tag &lt;Menus&gt;, ma non dentro un altro tag &lt;Menu&gt;. Poi aggiungi questo nuovo menu a to web/common/menu.jsp - che ora dovrebbe presentarsi in questo modo:
At line 415 changed 1 line.
Now if you run __ant clean deploy__ start Tomcat and go to [http://localhost:8080/appfuse/mainMenu.html], you should see something like the screenshot below.
Ora se esegui __ant clean deploy__, avvi Tomcat e vai a [http://localhost:8080/appfuse/mainMenu.html], dovresti vedere qualcosa di simile alla schermata qui sotto.
At line 421 changed 1 line.
Notice that there is a new link on the left side (from mainMenu.jsp) and on the right in our menu (from menu.jsp).
Nota che c'è un nuovo collegamento sul lato sinistro (da mainMenu.jsp) e sulla destra nel nostro menu (da menu.jsp).
At line 423 changed 2 lines.
!!That's it!
You've completed the full lifecycle of developing a set of master-detail pages with AppFuse and Struts - __Congratulations__! Now the real test is if you can run all the tests in your app without failure. To test, stop tomcat and run __ant clean test-all__. This will run all the unit tests within your project. As a reminder, it should be easy to setup and test AppFuse from scratch using __ant setup-db setup-tomcat test-all__. Also, if you're looking for more robust examples - checkout [Struts Resume|StrutsResume].
!!È tutto!
Hai completato il ciclo di sviluppo completo di un insieme di pagine master-detail con AppFuse e Struts - __Congratulazioni__! Ora il vero test è se sei in grado di eseguire tutti i test nella tua applicazione senza errori. Per verificare, ferma tomcat ed esegui __ant clean test-all__. Questo target esegure tutti gli unit test nel tuo progetto. Come promemoria, dovrebbe essere semplice impostare e fare un test di AppFuse da zero usando __ant setup-db setup-tomcat test-all__. Inoltre, se stai cercando degli esempi più corposi - prova a vedere [Struts Resume|StrutsResume].
At line 426 changed 1 line.
''__Happy Day!__''
''__Buona Giornata!__''

Back to ValidationAndList_it, or to the Page History.