At line 14 changed 3 lines. |
* [2] Create PersonFormControllerTest to test PersonFormController |
* [3] Create PersonFormController |
* [4] Run PersonFormControllerTest |
* [2] Create PersonActionTest to test PersonAction |
* [3] Create PersonAction |
* [4] Run PersonActionTest |
At line 21 changed 1 line. |
In this step, you'll generate a ''skeleton'' JSP to display information from the Person object. I say ''skeleton'' because it'll just be the <form> itself. It will contain WebWork's JSP tags that render table rows for each property in Person.java. The tool that we use to do this was written by [Erik Hatcher|http://www.blogscene.org/erik/]. It's basically just a single class (FormTagsHandler.java) and a couple of XDoclet templates (FormKeys.xdt and Form_jsp.xdt). All these files are located in extras/viewgen. |
In this step, you'll generate a JSP page to display information from the Person object. It will contain WebWork's JSP tags that render table rows for each property in Person.java. The [AppGen] tool that's used to do this is based off a StrutsGen tool - which was originally written by [Erik Hatcher|http://www.blogscene.org/erik/]. It's basically just a couple of classes and a bunch of XDoclet templates. All these files are located in extras/appgen. |
At line 25 changed 6 lines. |
* From the command-line, navigate to "extras/viewgen" |
* Execute __ant -Dform.name=Person__ to generate three files in extras/viewgen/build: |
** Person.properties (labels for your form elements) |
** personForm.jsp (skeleton JSP file for viewing a single Person) |
** personList.jsp (skeleton JSP file for viewing a list of People) |
* Copy the contents of Person.properties into web/WEB-INF/classes/ApplicationResources_en.properties. Here is an example of what you might add to ApplicationResources_en.properties: |
* From the command-line, navigate to "extras/appgen" |
* Execute __ant -Dobject.name=Person -Dappgen.type=pojo -Dapp.module=__ to generate a bunch of files in extras/appgen/build/gen. In fact, it'll generate all the files you need to complete this tutorial. However, let's just grab the ones you need. |
** web/WEB-INF/classes/Person.properties (labels for your form elements) |
** web/pages/personForm.jsp (JSP file for viewing a single Person) |
** web/pages/personList.jsp (JSP file for viewing a list of People) |
* Copy the contents of Person.properties into web/WEB-INF/classes/ApplicationResources.properties. These are all the keys you will need for titles/headings and form properties. Here is an example of what you should add to ApplicationResources.properties: |
At line 34 removed 1 line. |
person.firstName=First Name |
At line 35 added 1 line. |
person.firstName=First Name |
At line 37 added 12 lines. |
|
person.added=Person has been added successfully. |
person.updated=Person has been updated successfully. |
person.deleted=Person has been deleted successfully. |
|
# -- person list page -- |
personList.title=Person List |
personList.heading=Persons |
|
# -- person detail page -- |
personDetail.title=Person Detail |
personDetail.heading=Person Information |
At line 39 changed 1 line. |
* Copy personForm.jsp to web/pages/personForm.jsp. Copy personList.jsp to web/pages/personList.jsp. ''Notice that each of the new filename's first character is lowercase.'' |
* Copy personForm.jsp to web/pages/personForm.jsp. Copy personList.jsp to web/pages/personList.jsp. |
At line 48 changed 2 lines. |
* Add keys in ApplicationResources_en.properties the titles and headings in the JSPs |
In the generated JSPs, there are two keys for the title (top of the browser window) and the header (heading in the page). We now need to add these two keys (personDetail.title and personDetail.heading) to ApplicationResources_en.properties. |
* Add keys in ApplicationResources.properties the titles and headings in the JSPs |
In the generated JSPs, there are two keys for the title (top of the browser window) and the header (heading in the page). We now need to add these two keys (personDetail.title and personDetail.heading) to ApplicationResources.properties. |
At line 88 removed 5 lines. |
// so request.getRequestURL() doesn't fail |
MockHttpServletRequest request = |
new MockHttpServletRequest("GET", "/editPerson.html"); |
ServletActionContext.setRequest(request); |
|
At line 95 changed 1 line. |
assertEquals(action.edit(), "success"); |
assertEquals("success", action.edit()); |
At line 109 changed 2 lines. |
assertEquals(action.save(), "input"); |
assertEquals(action.getPerson().getLastName(), "Updated Last Name"); |
assertEquals("input", action.save()); |
assertEquals("Updated Last Name", action.getPerson().getLastName()); |
At line 123 changed 1 line. |
assertEquals(action.delete(), "success"); |
assertEquals("success", action.delete()); |
At line 175 added 1 line. |
saveMessage(getText("person.deleted")); |
At line 169 removed 4 lines. |
List args = new ArrayList(); |
args.add(person.getFirstName() + ' ' + person.getLastName()); |
saveMessage(getText("person.deleted", args)); |
|
At line 197 removed 3 lines. |
List args = new ArrayList(); |
args.add(person.getFirstName() + ' ' + person.getLastName()); |
|
At line 203 changed 1 line. |
saveMessage(getText(key, args)); |
saveMessage(getText(key)); |
At line 214 changed 1 line. |
There are a few keys you need to add to ApplicationResources_en.properties to display the success messages. This file is located in ''web/WEB-INF/classes'' - open it and add the following: |
There are a few keys you (might) need to add to ApplicationResources.properties to display the success messages. This file is located in ''web/WEB-INF/classes'' - open it and add the following: |
At line 218 changed 3 lines. |
{{{person.added=Information for <strong>{0}</strong> has been added successfully. |
person.deleted=Information for <strong>{0}</strong> has been deleted successfully. |
person.updated=Information for <strong>{0}</strong> has been updated successfully. |
{{{person.added=Person has been added successfully. |
person.updated=Person has been updated successfully. |
person.deleted=Person has been deleted successfully. |
At line 231 changed 2 lines. |
<bean id="personAction" class="org.appfuse.webapp.action.PersonAction" singleton="false"> |
<property name="personManager"><ref bean="personManager"/></property> |
<bean id="personAction" class="org.appfuse.webapp.action.PersonAction" scope="prototype"> |
<property name="personManager" ref="personManager"/> |
At line 245 removed 1 line. |
<!--interceptor-ref name="validationStack"/--> |
At line 252 removed 2 lines. |
;:''The "validationStack" interceptor-ref is commented out in the above XML block because you haven't defined any validation rules for the Person object. We'll uncomment this value when we add validation in the next tutorial.'' |
|
At line 284 removed 15 lines. |
Now let's clean up the generated personForm.jsp by making the "id" property a hidden field. Remove the following code block from web/pages/personForm.jsp: |
|
[{Java2HtmlPlugin |
|
<ww:textfield label="getText('person.id')" name="'person.id'" |
value="person.id" required="true"/> |
}] |
|
And add the following before the <table> tag: |
|
[{Java2HtmlPlugin |
|
<ww:hidden name="'person.id'" value="person.id"/> |
}] |
|
At line 302 changed 1 line. |
document.forms["person"].elements["firstName"].focus(); |
Form.focusFirstElement(document.forms["personForm"]); |
At line 305 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: |
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, with focus given to the first field in the form. |
At line 349 added 1 line. |
<verifytext description="verify success message" text="${person.updated}"/> |
At line 385 changed 2 lines. |
<verifytext description="verify success message" |
text="Information for <strong>Abbie Raible</strong> has been added successfully."/> |
<verifytext description="verify success message" text="${person.added}"/> |
At line 382 added 1 line. |
<prepareDialogResponse description="Confirm delete" dialogType="confirm" response="true"/> |
At line 384 added 1 line. |
<verifyNoDialogResponses/> |
At line 401 changed 2 lines. |
<verifytext description="verify success message" |
text="Information for <strong>Matt Canoo</strong> has been deleted successfully."/> |
<verifytext description="verify success message" text="${person.deleted}"/> |