嗨,我正在使用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中,我如何将userName从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;
}
}
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)
但它不起作用......
你知道我在这里犯了什么错吗?
使用redirectAction与param
<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"/>(或其他)
| 归档时间: |
|
| 查看次数: |
28532 次 |
| 最近记录: |