Struts 2 > Home > Tutorials > Step by Step > Lesson 4 - An html form with data, without getters or setters |

Struts 2
Lesson 4 - An html form with data, without getters or setters
Edit Page Browse Space Add Page Add News
Added by richardbondi, last edited by Ted Husted on May 15, 2006 (view change) show comment hide comment
Comment:
Update parent page
View page history

# Lesson 4: An html form with data, without getters or setters

For the form field named "yourName" in the previous lesson, we also had to create the getters and setters getYourName() and setYourName() in the action, as well as the private variable yourName. With dozens of forms and hundreds of form fields, you'll be typing thousands of getters and setters. That can get old fast. In this lesson, we'll repeat the last lesson, but without any of that extra typing.

### 1. Create the html form

Use the same JSP form from the previous lesson, but change the form action to `page04.action`:

    <html>
    <head>
    	<title>A simple form with data</title>
    </head>
    <body>
    	<p>What is your name?</p>

    	<form action="form04.action" method="post">
    		<p><input type="text" name="yourName"></p>
    		<p><input type="submit" value="Submit your name." /></p>
    	</form>

    </body>
    </html>

### 2. Create the form action

Paste this code into [src]/lessons/Form04Action.java:

    package lessons;

    import com.opensymphony.xwork.ActionSupport;
    import com.opensymphony.webwork.interceptor.ParameterAware;

    import java.util.Map;

    public class Form04Action extends ActionSupport implements ParameterAware {

      Map parameters;

      public Map getParameters() {
        return parameters;
      }

      public void setParameters(Map parameters) {
        this.parameters = parameters;
      }

      public String execute() {
        String[] yourName = (String[]) parameters.get("yourName");
        if(yourName == null || yourName[0] == null || yourName[0].length() == 0)
          return ERROR;
        else
          return SUCCESS;
      }
    }

### Register the action in xwork.xml:

Edit [webapp]/WEB-INF/classes/xwork.xml:

    <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
    "http://www.opensymphony.com/xwork/xwork-1.0.dtd">

    <xwork>
      <!-- Include webwork defaults (from WebWork JAR). -->
      <include file="webwork-default.xml" />

      <!-- Configuration for the default package. -->
      <package name="default" extends="webwork-default">
        <!-- Default interceptor stack. -->
        <default-interceptor-ref name="defaultStack" />

        <!-- 02 -->
        <action name="form02" class="lessons.Form02Action">
          <result name="success" type="dispatcher">page02-success.jsp</result>
        </action>

        <!-- 03 -->
        <action name="form03" class="lessons.Form03Action">
          <result name="success" type="dispatcher">page03-success.jsp</result>
          <result name="error" type="dispatcher">page03-error.jsp</result>
        </action>

        <!-- 04 -->
        <action name="form04" class="lessons.Form04Action">
          <result name="success" type="dispatcher">page04-success.jsp</result>
          <result name="error" type="dispatcher">page03-error.jsp</result>
          <interceptor-ref name="servlet-config"/>
        </action>

      </package>
    </xwork>

### Create the success and error pages

We'll use the same error page, but create a slightly different success page `page04-success.jsp`. The only difference is the <ww:property> tag.

    <%@ taglib uri="webwork" prefix="ww" %>
    <html>
    <head>
    	<title>Success page for form with data</title>
    </head>
    <body>

    Hello, <ww:property value="parameters.yourName" />!

    </body>
    </html>

### Try it

Don't forget to compile your action to [webapp]/WEB-INF/classes, and to restart your web application if necessary.

Go ahead and try it now. Load `page04.jsp`, enter "Bob" in the text field, and click the form submit button. You should see `page04-success.jsp` saying "Hello, Bob!"

## How the code works

You've probably figured out what is going on just from looking at the code.

Instead of a setter `setYourName()` setting a private variable `yourName` in the action, `setParameters()` magically extracts everything from the JSP `request` object and puts into a private local Map `parameters`. Then `execute()`, instead of looking for a `yourName` variable, is able to get the value of the "yourName" field from `parameters`. So far so good .

Back on the `page04-success.jsp` page, `<ww:property value="yourName" />` isn't going to work any more, because there is no `getYourName()` getter in the action. Instead, `<ww:property value="parameters.yourName" />` calls the `getParameters()` getter, and is able to get the value of the "yourName" field. Pretty neat!

We haven't covered how to handle radio buttons, checkboxes, and other strange html form fields. That involves dealing with the fact that every entry in the `parameters` Map is a String[]. We'll cover this in a later lesson.

Previous Lesson | Next Lesson