:index-group: Frameworks
:jbake-type: page
:jbake-status: status=published
= Struts

_Help us document this example! Click the blue pencil icon in the upper
right to edit this page._

== AddUser

[source,java]
----
package org.superbiz.struts;

import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;


public class AddUser {

    private int id;
    private String firstName;
    private String lastName;
    private String errorMessage;


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String execute() {

        try {
            UserService service = null;
            Properties props = new Properties();
            props.put(Context.INITIAL_CONTEXT_FACTORY,
                    "org.apache.openejb.core.LocalInitialContextFactory");
            Context ctx = new InitialContext(props);
            service = (UserService) ctx.lookup("UserServiceImplLocal");
            service.add(new User(id, firstName, lastName));
        } catch (Exception e) {
            this.errorMessage = e.getMessage();
            return "failure";
        }

        return "success";
    }
}
----

== AddUserForm

[source,java]
----
package org.superbiz.struts;

import com.opensymphony.xwork2.ActionSupport;


public class AddUserForm extends ActionSupport {
}
----

== FindUser

[source,java]
----
package org.superbiz.struts;

import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class FindUser {

    private int id;
    private String errorMessage;
    private User user;

    public User getUser() {
        return user;
    }

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

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String execute() {

        try {
            UserService service = null;
            Properties props = new Properties();
            props.put(Context.INITIAL_CONTEXT_FACTORY,
                    "org.apache.openejb.core.LocalInitialContextFactory");
            Context ctx = new InitialContext(props);
            service = (UserService) ctx.lookup("UserServiceImplLocal");
            this.user = service.find(id);
        } catch (Exception e) {
            this.errorMessage = e.getMessage();
            return "failure";
        }

        return "success";
    }
}
----

== FindUserForm

[source,java]
----
package org.superbiz.struts;

import com.opensymphony.xwork2.ActionSupport;


public class FindUserForm extends ActionSupport {
}
----

== ListAllUsers

[source,java]
----
package org.superbiz.struts;

import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.List;
import java.util.Properties;

public class ListAllUsers {

    private int id;
    private String errorMessage;
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String execute() {

        try {
            UserService service = null;
            Properties props = new Properties();
            props.put(Context.INITIAL_CONTEXT_FACTORY,
                    "org.apache.openejb.core.LocalInitialContextFactory");
            Context ctx = new InitialContext(props);
            service = (UserService) ctx.lookup("UserServiceImplLocal");
            this.users = service.findAll();
        } catch (Exception e) {
            this.errorMessage = e.getMessage();
            return "failure";
        }

        return "success";
    }
}
----

== User

[source,java]
----
package org.superbiz.struts;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name = "USER")
public class User implements Serializable {
    private long id;
    private String firstName;
    private String lastName;

    public User(long id, String firstName, String lastName) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public User() {
    }

    @Id
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
----

== UserService

[source,java]
----
package org.superbiz.struts;

import java.util.List;

public interface UserService {
    public void add(User user);

    public User find(int id);

    public List<User> findAll();
}
----

== UserServiceImpl

[source,java]
----
package org.superbiz.struts;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;

@Stateless
public class UserServiceImpl implements UserService {

    @PersistenceContext(unitName = "user")
    private EntityManager manager;

    public void add(User user) {
        manager.persist(user);
    }

    public User find(int id) {
        return manager.find(User.class, id);
    }

    public List<User> findAll() {
        return manager.createQuery("select u from User u").getResultList();
    }
}
----

== persistence.xml

[source,xml]
----
</persistence-unit>

  -->
</persistence>
----

== struts.xml

[source,xml]
----
<struts>
  <constant name="struts.devMode" value="true"></constant>
  <package name="default" namespace="/" extends="struts-default">
    <action name="addUserForm" class="org.superbiz.struts.AddUserForm">
      <result>/addUserForm.jsp</result>
    </action>
    <action name="addUser" class="org.superbiz.struts.AddUser">
      <result name="success">/addedUser.jsp</result>
      <result name='failure'>/addUserForm.jsp</result>
    </action>
    <action name="findUserForm" class="org.superbiz.struts.FindUserForm">
      <result>/findUserForm.jsp</result>
    </action>
    <action name="findUser" class="org.superbiz.struts.FindUser">
      <result name='success'>/displayUser.jsp</result>
      <result name='failure'>/findUserForm.jsp</result>
    </action>
    <action name="listAllUsers" class="org.superbiz.struts.ListAllUsers">
      <result>/displayUsers.jsp</result>
    </action>

  </package>
</struts>
----

== decorators.xml

[source,xml]
----
<decorators defaultdir="/decorators">
  <decorator name="main" page="layout.jsp">
    <pattern>/*</pattern>
  </decorator>
</decorators>
----

== web.xml

[source,xml]
----
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
  <display-name>Learn EJB3 and Struts2</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    <init-param>
      <param-name>actionPackages</param-name>
      <param-value>com.lq</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>struts-cleanup</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
  </filter>
  <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts-cleanup</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <jsp-config>
    <jsp-property-group>
      <description>JSP configuration of all the JSP's</description>
      <url-pattern>*.jsp</url-pattern>
      <include-prelude>/prelude.jspf</include-prelude>
    </jsp-property-group>
  </jsp-config>
</web-app>
----
