简体   繁体   中英

Populating of list after a redirect action in struts2

I have a index.jsp which redirects to otl_homepage.jsp on successful login. When the user logs in, I need to display a list in the otl_homepage.jsp . In my struts.xml , if i give type="chain" or no type at all, the list is getting fetched. But if I use type="redirectAction" , the list is returning null. How do I obtain this list? The list is maintained in my java action class.

please find the struts.xml here and the java class

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <constant name="struts.enable.DynamicMethodInvocation"
    value="false" />
  <constant name="struts.devMode" value="false" />
  <constant name="struts.custom.i18n.resources" value="MessageResource" />
   <constant name="struts.convention.result.path" value="/"></constant>

 <package name="default" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="authentication"
                class="com.opentext.planning.interceptor.LoginInterceptor"></interceptor>
            <interceptor-stack name="authStack">
                <interceptor-ref name="authentication"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="authStack"></default-interceptor-ref>

       <!--  <global-results>
            <result name="login" type="redirect">/home.action</result>
        </global-results>

        <action name="home">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result>/index.jsp</result>
        </action>-->


        <action name="login" class="com.opentext.planning.view.OTLAuthentication" >
            <result name="success" type="redirectAction">Otl_Homepage</result>
            <param name="otlUserList">${otlUserList}</param>
            <result name="login">/index.jsp</result>
            <result name="failure">/index.jsp</result>
            <result name="failure2">/index.jsp</result>
            </action>
            <action name="Otl_Homepage" class="com.opentext.planning.view.OTLAuthentication" method="home">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/Otl_Homepage.jsp</result>
             <result name="failure">/index.jsp</result>
            <result name="failure2">/index.jsp</result>
            </action>

Java class:

public String execute(){
    System.out.println("inside execute");



    //System.out.println("user is" +user.getUser());
   // System.out.println("username is " +user.getUserName());
    //if("pankaj".equals(user.getUserName()) && "admin".equals(user.getPassword())){
        //System.out.println("inside if");

        if (j_username != null) {
        System.out.println("inside function");
    System.out.println("user name is "+j_username);
   // add userName to the session
    System.out.println("user name is 2"+j_username);
    sessionMap.put("loginId", j_username);
   System.out.println("dunno if the will print");
       // user.setUserName(user.getUserName());
      //  sessionMap.put("USER", j_username);
        status = otlAuthenticationController.loginAuthentication(j_username,j_password);
        if(status == "success")
        {
            this.otlUserList= otlAuthenticationController.obtainList();
            System.out.println("size is"+otlUserList.size());
            return "success";
        }

    }
        return status;
}

After redirection to another action you need to populate the list again in the home action. The redirectAction result type redirects to another action. Another action instantiate a new instance of the action class. This instance should be initialized and populated before you return a JSP result. In JSP the list values retrieved from the ValueStack which has an action instance that returned a list if the public getter method exists in the action class.

public String home(){
    this.otlUserList= otlAuthenticationController.obtainList();
    System.out.println("size is"+otlUserList.size());
    return "success";
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM