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

Struts2:如何将值从一个动作传递到另一个动作。或者从一个JSP到另一个JSP。不使用会话,struts2,Struts2,嗨,我正在使用Struts2构建一个项目。然而,在发展过程中,我面临着许多问题。Struts2中最大的问题是会话管理。与此相关的信息非常有限 我一直在寻找解决问题的方法,但得到的信息有限,不能满足我的需要 我不希望使用容器的会话(ApacheTomcat7),因为当多个用户尝试使用该应用程序时,它将成为开销 我创建了2个动作类和2个JSP。 在JSP1(Login.jsp和LoginAction.java POJO)中输入的值应该在另一个操作(HomeAction.java POJO)中使用,之

嗨,我正在使用Struts2构建一个项目。然而,在发展过程中,我面临着许多问题。Struts2中最大的问题是会话管理。与此相关的信息非常有限

我一直在寻找解决问题的方法,但得到的信息有限,不能满足我的需要

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

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

我也在用瓷砖

我已尝试使用标记,但无法为其设置值

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

一个小的登录页面的例子将不胜感激。 e、 g.在文本字段中输入的用户名应使用两个不同的操作类显示到另一个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>
<?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>
web.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>
<?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>
UserData.java

public class UserData {
   private String userName;

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

   public String getUserName() {
      return userName;
   }
}
如何设置中的UserData对象的userName属性 LoginAction.java

我试过这个

<s:hidden name="userData.userName" value="userName" />

但它不起作用


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

重定向操作
参数

  <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> 

主页
${userName}
/jsp/Login.jsp

另外,不要忘记在
HomeAction
类中添加用户名getter/setter。然后在您的
Home.jsp
中,您可以直接使用
(或任何东西)

会话插件是会话的良好包装器,它可以用来管理操作之间的对象生命周期。()


当您有一些基于步骤的jsp页面(多于两个步骤)时,此解决方案将非常有用。中的插件是注释库,也有必要的jsp标记

Hi Anu,感谢您的帮助。不过,我刚刚编辑了上面的问题。它不允许我添加到这个评论框中。很抱歉不知道如何回答。在做了这些更改之后,我收到了一个空的异常分解您的问题。首先尝试使用
stringusername
,就像您最初在
LoginAction类中给出的那样。在
HomeAction
类中声明相同的变量及其getter/setter。然后尝试在
Home.jsp
中查看该值。我不明白你编辑的帖子。您是否试图将
用户名
从登录页面提交到
用户数据
?您不需要声明一个
userData
构造函数来设置
userName
属性吗?您好,我已经尝试过了,并给出了两个不同的结果。”主页${userName}此处的userName已替换为UserData对象。并获得异常HomeAction.setUserData(字符串)。。。NoSuchMethodException这是否意味着我们不能传递字符串以外的参数???我从未尝试过对象,但我认为它应该可以工作。当您传递
用户名时,它是否工作?您在
redirectAction
中传递
userName
,因此struts将在
HomeAction
中查找
setUserName(String userName)
。同样,如果您在结果中传递userData,它将查找setUserData(userData data)方法。你确定你有正确的getter/setter吗?我不理解你使用会话的具体问题——这正是它存储会话特定数据的目的。您是否证明您拥有“太多”的会话数据?当不再需要会话数据时,是否忽略了删除会话数据?