嗨,我正在使用 Struts2 构建一个项目。然而,在开发过程中,我面临着许多问题。最大的问题是 Struts2 中的会话管理。与此相关的信息非常有限。
我一直在寻找解决问题的方法,但只获得了无法满足我需求的有限信息。
我不希望使用容器的会话(Apache Tomcat 7),因为当多个用户尝试使用该应用程序时,它将成为一种开销。
我创建了 2 个 Action 类和 2 个 JSP。在 JSP1(Login.jsp 和 LoginAction.java POJO)中输入的值应该在另一个动作(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>
登录操作.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?
注意:存储到会话中不是首选选项,但如果没有其他方法可以在 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;
}
}
如何设置 LoginAction.java 中的 UserData 对象的 userName 属性?
我试过这个
<s:hidden name="userData.userName" value="userName" />
但它不工作....
你知道我在这里犯了什么错误吗?