Struts2:如何将值从一个操作传递到另一个操作.或者从一个JSP到另一个JSP.不使用会话

adi*_*va6 4 struts2

嗨,我正在使用Struts2构建一个项目.但是在开发过程中我遇到了很多问题.最大的问题是Struts2中的会话管理.与此相关的信息非常有限.

我已经找到解决问题的方法,但只获得了有限的信息,不能满足我的需求.

我不希望使用容器的会话(Apache Tomcat 7),因为当多个用户尝试使用该应用程序时,它将成为开销.

我创建了2个Action类和2个JSP.在JSP1中输入的值(Login.jsp和LoginAction.java POJO)应该在另一个动作(HomeAction.java POJO)中使用,之后它们应该显示在后续的JSP(Home.jsp)中.

我也在使用瓷砖.

我尝试过使用tag但我无法为其设置值.

在Struts2中,我如何将JSP1/Action上的对象传递给另一个Action/JSP2?

一个小的登录页面示例将不胜感激.例如,在文本字段中输入的用户名应使用2个不同的Action类显示给另一个JSP页面.

在struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> 

    <package name="default" extends="struts-default">
        <result-types>
            <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types> 

        <action name="login" class="org.myaction.LoginAction" method="validateLoginCredentials">
            <result name="autheticatedUser" type="redirect" >homePage</result>
            <result name="fail" >/jsp/Login.jsp</result>
        </action>

        <action name="homePage" class="org.myaction.HomeAction" method="execute">
            <result name="responseOK" type="tiles" >/tile.NextPage</result>
            <result name="error" type="tiles" >/tile.HomePage</result>
        </action>
    </package>
</struts>
Run Code Online (Sandbox Code Playgroud)

LoginAction.java

    public class LoginAction extends ActionSupport {

    //private static final String SUCCESS = "success"; 
    private static final String FAIL = "fail";

    private String userName;
    private String password;

    public String getUserName() { return userName; }

    public void setUserName(String userName) { this.userName = userName; }

    public String getPassword() { return password; }

    public void setPassword(String password) { this.password = password; }

    public String validateLoginCredentials() {

          if(this.userName.equals("admin") 
                      && this.password.equals("allow")) {

         return "autheticatedUser";
              }
        addActionError(getText("error.login"));
        return FAIL;
    }
}
Run Code Online (Sandbox Code Playgroud)

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/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <display-name>Login</display-name>

    <context-param>
        <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>/jsp/Login.jsp</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>
Run Code Online (Sandbox Code Playgroud)

我的问题是,在Struts2中,我如何将userNameLogin.jsp/LoginAction.java传递Home.jsp/HomeAction.java

注意:存储到会话不是首选选项,但如果没有其他方法可以在Struts2中维护用户状态,则可以使用它.

一个小的登录页面示例将不胜感激.例如,在文本字段中输入的用户名应使用2个不同的Action类显示给另一个JSP页面.

编辑

嗨,谢谢你!我非常感谢你的回复.我认为这会奏效.还有一件事我忘了提.LoginAction.java类中存在另一个类(JavaBean)属性.

public class LoginAction extends ActionSupport {

   private UserData userData;

   public void setUserData(UserData userData) {
      this.userData = userData;
   }

   public String getUserData() {
      return userData;
   }

}
Run Code Online (Sandbox Code Playgroud)

UserData.java

public class UserData {
   private String userName;

   public void setUserName(String userName) {
      this.userName = userName;
   }

   public String getUserName() {
      return userName;
   }
}
Run Code Online (Sandbox Code Playgroud)

如何设置LoginAction.java中UserData对象的userName属性?

我试过这个

<s:hidden name="userData.userName" value="userName" />
Run Code Online (Sandbox Code Playgroud)

但它不起作用......

你知道我在这里犯了什么错吗?

anu*_*anu 6

使用redirectActionparam

  <action name="login" class="org.myaction.LoginAction" method="validateLoginCredentials">
      <result name="autheticatedUser" type="redirectAction">
        <param name="actionName">homePage</param>
        <param name="userName">${userName}</param>
      </result>
      <result name="fail" >/jsp/Login.jsp</result>
  </action> 
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记HomeAction类中添加userName getter/setter .然后在你的Home.jsp你可以直接使用<s:property value="userName"/>(或其他)