advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement

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.

 Microsoft RIA Development Center
 IBM Rational Resource Center
 Destination .NET
XML error: not well-formed (invalid token) at line 33
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Free VMware Server 2.0 Now Release Candidate
Linux Player Xandros Grabs Storied Rival Linspire
Hey Enterprise: Here Comes the 3G iPhone
MySpace Opens Profile Portability API
Microsoft Jumps Into Virtualization Fray
Eclipse Ganymede Makes It Easier for Devs
Open Source Nokia a Threat to Microsoft, Google?
Salesforce, Google Head for 2nd on Apps
HP Open Sources Unix File System for Linux
Red Hat Opens Its Network to Space

Build a Generic Histogram Generator for SQL Server
Beyond XML and JSON: YAML for Java Developers
Mastering the Windows Mobile Emulators
Avaya AE Services Provide Rapid Telephony Integration with Facebook
Featured Algorithm: Intel Threading Building Blocks: parallel_reduce
Getting Started with Windows Live Admin Center
Eight Key Practices for ASP.NET Deployment
Java ME User Interfaces: Do It with LWUIT!
Talking VPro: Transcript
Bringing Semantic Technology to the Enterprise

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
IBM eBook: Planning a Service Oriented Architecture
IBM eBook: Choosing the Right Architecture--What It Means for You and Your Business
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Avaya Article: Using Intelligent Presence to Create Smarter Business Applications
Intel Go Parallel Article: Getting Started with TBB on Windows
Microsoft Article: 7.0, Microsoft's Lucky Version?
Avaya Article: How to Feed Data into the Avaya Event Processor
IBM Article: Developing a Software Policy for Your Organization
Microsoft Article: Managing Virtual Machines with Microsoft System Center
Intel Go Parallel Article: Intel Threading Tools and OpenMP
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Silverlight 2 App and Walkthrough: Leverage Silverlight 2 with SQL Server and XML
IBM Article: Enterprise Search--Do You Know What's Out There?
HP Demo: StorageWorks EVA4400
Microsoft Article: The Progress and Promise of Deep Zoom
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES