Artem Malinko
Artem Malinko

Reputation: 1771

How to forward result to another action in Struts2?

I have this action:

package com.test;

import com.opensymphony.xwork2.Action;

public class TestAction implements Action{
    private String simpleParam;

    public String getSimpleParam() {
        return simpleParam;
    }

    public void setSimpleParam(String simpleParam) {
        this.simpleParam = simpleParam;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

When it's executed I want to invoke another action inside struts(e.g. not redirect) and pass to it simpleParam. SecondAction is:

package com.test;

import com.opensymphony.xwork2.Action;

public class HelloAction implements Action {
    private String id;
    private String result;

    public String getId() {
        return id;
    }

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

    public String getResult() {
        return result;
    }

    @Override
    public String execute() throws Exception {
        result = "result" + getId();
        return SUCCESS;
    }
}

I saw working example when in struts.xml in result simply typed another action name and params and it worked. So I'm trying to do this:

<struts>
    <package name="main" extends="struts-default">
        <action name="test" class="com.test.TestAction">
            <result name="success">hello.action?id=${simpleParam}</result>
        </action>
        <action name="hello" class="com.test.HelloAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>

Idea totally sees this action but in browser I get 404 status. When I simply invoke hello.action from browser it works. Redirect also works. I also tried chain, but my param wasn't passed and it's not very convinient. Am I doing it right? And if so what could be the cause of 404 status?

Upvotes: 4

Views: 27079

Answers (3)

karthikeyan v
karthikeyan v

Reputation: 1

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
      <display-name>Struts2 Application</display-name>
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
                org.apache.struts2.dispatcher.FilterDispatcher
            </filter-class>
      </filter>
      <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>
    </web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
  <display-name>Struts2 Application</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
  </filter>
  <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>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<a href="viewrecords">View Records all</a>


</body>
</html>

edit.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>  

<b>id :</b> <s:property value="id"/> <br>
<b>name :</b> <s:property value="name"/> <br>
<b>salary :</b> <s:property value="salary"/> <br>
<s:textfield name="userid" label="phoneno" value="id"/>

UserAction.java

package com.action;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;



import com.model.User;

import com.userservice.UserService;


public class UserAction  {


    private int id;
    private String name;
    private int salary;
    private int phoneno;

    ArrayList<User> list=new ArrayList<User>();  

    public ArrayList<User> getList() {  
        return list;  
    }  
    public void setList(ArrayList<User> list) {  
        this.list = list;  
    }  
    public String execute(){  
      UserService service= new UserService();
    list=service.getdetails();

     return "success";  
    }  

    public String delete() {
        System.out.println("----------");



        return "success";
    }



    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public int getPhoneno() {
        return phoneno;
    }
    public void setPhoneno(int phoneno) {
        this.phoneno = phoneno;
    }



}

UserService.java

package com.userservice;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import com.model.User;

public class UserService {
    ArrayList<User> list=new ArrayList<User>();


    public ArrayList<User> getdetails(){
    try{  
          Class.forName("oracle.jdbc.driver.OracleDriver");  
          Connection con=DriverManager.getConnection(  
            "jdbc:oracle:thin:@localhost:1521:xe","oracletest","oracle");  

          PreparedStatement ps=con.prepareStatement("select * from employee");  
          ResultSet rs=ps.executeQuery();  

          while(rs.next()){  
           User user=new User();  
           user.setId(rs.getInt(1));  
           user.setName(rs.getString(2));  
           user.setSalary(rs.getInt(3));  
           user.setPhoneno(rs.getInt(4));  

           list.add(user);  
           System.out.println(rs.getString(2));
          }  

          con.close();  
         }catch(Exception e){e.printStackTrace();}

    return list;

    }

    public ArrayList<User> getList() {  
        return list;  
    }  
    public void setList(ArrayList<User> list) {  
        this.list = list;  
    } 
}

User.java

package com.model;

public class User {

    private int id;
    private String name;
    private int salary;
    private int phoneno;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public int getPhoneno() {
        return phoneno;
    }
    public void setPhoneno(int phoneno) {
        this.phoneno = phoneno;
    }





}

welcome.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>Struts2  Example</title>
</head>
<body>


<table>
<tr>
    <th>id</th>
    <th>Name</th>
    <th>salary</th>
    <th>phoneno</th>

</tr>
<s:iterator value="list" var="user">
    <tr>
        <td><s:property value="id"/> </td>
        <td><s:property value="name"/></td>
        <td><s:property value="salary"/></td>
        <td><s:property value="phoneno"/></td>
        <td><a href="<s:property value="delete"/>">edit</a></td>
        <td><a href="delete?id=<s:property value="id"/>&delete?name=<s:property value="name"/>">edit1</a></td>

    </tr> 
</s:iterator>
</table>
</body>
</html>
</html>

Upvotes: -1

karthikeyan v
karthikeyan v

Reputation: 1

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
  <display-name>Struts2 Application</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
  </filter>
  <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>
</web-app>

Upvotes: -1

StefanHeimberg
StefanHeimberg

Reputation: 1465

this could be helpful: http://struts.apache.org/docs/action-chaining.html

<struts>
    <package name="main" extends="struts-default">
        <action name="test" class="com.test.TestAction">
            <result name="success" type="chain">hello</result>
        </action>
        <action name="hello" class="com.test.HelloAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>

to pass a parameter from one action to another you could use the HttpServletRequest (http://www.mkyong.com/struts2/how-to-get-the-httpservletrequest-in-struts-2):

TestAction.java:

package com.test;

import com.opensymphony.xwork2.Action;

public class TestAction implements Action{
    private String simpleParam;

    public String getSimpleParam() {
        return simpleParam;
    }

    public void setSimpleParam(String simpleParam) {
        this.simpleParam = simpleParam;
    }

    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        request.setAttribute("id", simpleParam);
        return SUCCESS;
    }
}

HelloAction.java:

package com.test;

import com.opensymphony.xwork2.Action;

public class HelloAction implements Action {
    private String id;
    private String result;

    public String getId() {
        return id;
    }

    public String getResult() {
        return result;
    }

    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        id = (String)request.getAttribute("id");

        result = "result" + getId();
        return SUCCESS;
    }
}

Upvotes: 5

Related Questions