gpt4 book ai didi

Struts2:如何将值从一个 Action 传递到另一个 Action 。或者从一个 JSP 到另一个 JSP。不使用 session

转载 作者:行者123 更新时间:2023-12-05 00:34:36 26 4
gpt4 key购买 nike

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

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

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

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

我也在用瓷砖。

我曾尝试使用标签,但无法为其设置值。

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

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

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>

我的问题是,
在 Struts2 中,
我怎么能通过 用户名 来自 Login.jsp/LoginAction.java Home.jsp/HomeAction.java ?

注意:存储到 session 中不是首选选项,但如果没有其他方法可以在 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;
}

}

用户数据.java
public class UserData {
private String userName;

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

public String getUserName() {
return userName;
}
}

如何设置 UserData 对象的 userName 属性
登录操作.java ?

我试过这个
<s:hidden name="userData.userName" value="userName" />

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

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

最佳答案

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

另外, 别忘了HomeAction 中添加 userName getter/setter类(class)。然后在您的 Home.jsp您可以直接使用 <s:property value="userName"/> (管他呢)

关于Struts2:如何将值从一个 Action 传递到另一个 Action 。或者从一个 JSP 到另一个 JSP。不使用 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10495926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com