Step 7: Coding the Action class
The Action class is--seen from the application programmer's perspective--the
heart of the application. This is where you must decide how you'll separate your
own application code . Most often the Action class should be kept as "thin" as
possible, placing business logic in other beans or even EJB's on other
servers.
The implementation of the Action class must contain a "perform" method, which
receives the request and response objects, the instance of the ActionForm bean
and the action mapping information from the configuration file. A very simple
Action class, which simply lets the request pass unaltered, is given as
follows:
package hansen.playground;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public final class SubmitAction extends Action {
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
SubmitForm f = (SubmitForm) form; // get the form bean
// and take the last name value
String lastName = f.getLastName();
// Translate the name to upper case
//and save it in the request object
request.setAttribute("lastName", lastName.toUpperCase());
// Forward control to the specified success target
return (mapping.findForward("success"));
}
}
The manipulation of the "last name" value is only done to show how to access
the form bean and how you may store data for use by other components, e.g. the
jsp-file.
You may recall that the target of "success", which was specified in the
Struts config file, was the submit.jsp file.
This class is also placed in the WEB-INF/classes/hansen/playground
directory.
An important thing to remember is that Struts only creates a single instance
of the Action class, shared amongst all users of the application. You should
therefore not use member variables, but only local variables.
Step 8: Testing your application
First restart your servlet container. Normally you'll have to do this
whenever you modify a config file or update a Java class.
To test our example, enter this URL in the browser:
http://localhost:8080/myproject/submit.jsp. If your application works, you'll
see that "Last Name" is filled with "Hansen" (which means that Struts has
already created an instance of the ActionForm bean, and extracted the data from
it). Now enter data in all the controls and press "Submit". Note that the URL
changes to "submit.do", and that all data stays unchanged in the form.
You might also want to try to enter some "problematic" characters like single
and double quotes, or the "<" and ">" characters in the text fields to see
that Struts is perfectly capable of handling them correctly. Use the browsers
"view source" to see how Struts does it.
Using the tag libraries
In step 7 you saw how we stored the users last name in uppercase in the
request object. To give you an idea of how some of the other Struts tags work,
I'll show how to display this name--with a greeting to the user.
At the
bottom of the submit.jsp file we add these tags:
<logic:present name="lastName" scope="request">
Hello
<logic:equal name="submitForm" property="age" value="a">
young
</logic:equal>
<logic:equal name="submitForm" property="age" value="c">
old
</logic:equal>
<bean:write name="lastName" scope="request"/>
</logic:present>
The tags have this meaning:
|
Tags |
Purpose |
<logic:present name="lastName" scope="request">
. . .
</logic:present> |
Only if the name "lastName" is present in the request object we'll
evaluate what's inside the opening and closing tags. Therefore nothing
will show up until the "perform" method is called. |
<logic:equal name="submitForm"
property="age"
value="a">
young
</logic:equal> |
If the property "age" in the ActionForm bean has the value "a" (age
0-19) the text "young" is send to the browser. |
<bean:write name="lastName" scope="request"/> |
Sends the value of the "lastName" attribute in the request object to
the browser. |
With these extra lines the page could display like this in the browser:

- Figure 8: Output from Struts tags -
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|