Meyyappan has posted 101 posts at DZone. View Full User Profile

Struts 2 ModelDriven Action Tutorial

06.15.2012
| 33568 views |
  • submit to reddit

To create a ModelDriven Action our Action class should implement the ModelDriven interface and should include the modelDriven interceptor. The modelDriven interceptor is already included in the default stack.

The next step is to implement the getModel() method in such a way that it returns the application domain object, in our example we return the User object.

When using the ModelDriven method we need to initialize the User object ourselves.

The framework will automatically transfers the form data into the User object.

public class UserAction extends ActionSupport implements ModelDriven {

    private User user = new User();

    public UserAction() {
    }

    public Object getModel() {
        return user;
    }

    public String execute() {
        return SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

You can directly access the user attributes like name, age etc in Action use the following syntax.

user.getXXX();

The User class contains the following attributes and the corresponding getter and setter methods.

public class User {

    private String name;
    private int age;
    private String sex;
    private String[] hobby;
    private String country;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

In the jsp page the user attributes can be accessed directly. To refer the user's age, the value of the name attribute should be

name = "age"

The index.jsp page contains the following code.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Details</title>
</head>
<body>
<s:form action="UserAction" >
    <s:textfield name="name" label="User Name" />
    <s:textfield name="age" label="Age" />
    <s:radio name="sex" label="Sex" list="{'M','F'}" />
    <s:checkboxlist name="hobby" label="Hobby"
    list="{'Music','Art','Dance'}" />
    <s:select name="country" label="Country"
    list="{'Select','India','USA','France','Spain'}"  />
    <s:submit />
</s:form>
</body>
</html>

The result.jsp page contains the follwing code.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Details</title>
</head>
<body>
    <h2>User Details</h2>
    <hr>
    User Name :<s:property value="name" /><br>
    Age :<s:property value="age" /><br>
    Hobbies :<s:property value="hobby" /><br>
    Country :<s:property value="country" /><br>
</body>
</html>

On executing the example the following page will be displayed to the user.

On entering the user details and clicking the Submit button the following page will be dispalyed.

You can download the Struts 2 ModelDriven Action example by clicking the download link.

Source :Download
Source + Lib :Download
Published at DZone with permission of its author, Meyyappan Muthuraman.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Tags:

Comments

Ratnesh Singh replied on Tue, 2013/06/25 - 7:38am

I think there is a problem with ModelDriven<T>, when I have a Model as below:

public class MyBean{

              String uName;

public String getuName() {return uName;}public void setuName(String uname) {this.uName = uname;}

}


ModelDriven did not populate it. Though I had figured out this. This is because the setter and getter names of variables.But just curious to know if I want to populate my bean with same setter getter could it be possible.

BTW these setter getter are generated using Eclipse.

Thnaks

Ratnesh 



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.