Tutorials : Stepping through Jakarta Struts :

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 -

How to Add Java Applets to Your Site

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.