Java 无法从Struts 2中的会话获取属性
我是Struts2新手,正在尝试检索在action类中设置的属性Java 无法从Struts 2中的会话获取属性,java,jsp,session,struts2,Java,Jsp,Session,Struts2,我是Struts2新手,正在尝试检索在action类中设置的属性 LoginAction.java: public class LoginAction extends ActionSupport implements SessionAware { private static final long serialVersionUID = 1L; private Map<String, Object> session; // field variables
LoginAction.java
:
public class LoginAction extends ActionSupport implements SessionAware {
private static final long serialVersionUID = 1L;
private Map<String, Object> session;
// field variables
@Override
public String execute() {
UserManager um = new UserManager();
String registeredPassword = um.getCurrentUserDetail("user_password", getUserId());
if(getUserPassword().equals(registeredPassword)) {
String currentUserId = um.getCurrentUserDetail("user_id", userId);
int currentUserType = um.getCurrentUserType(userId);
session.put("currentUserId", (String) currentUserId);
session.put("currentUserType", (Integer) currentUserType);
System.out.println("You have successfully logged in!");
return SUCCESS;
}
System.out.println("Your login has failed!");
return ERROR;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
// getters and setters
}
<?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>
<package name="default" extends="struts-default">
<action name="login" class="com.mypackage.model.LoginAction">
<result name="success">/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="com.mypackage.model.LoginAction" %>
<head>
<%
int type = 0;
if(session.containsKey("currentUserType")) {
type = (Integer) session.get("currentUserType");
}
%>
</head>
index.jsp
:
public class LoginAction extends ActionSupport implements SessionAware {
private static final long serialVersionUID = 1L;
private Map<String, Object> session;
// field variables
@Override
public String execute() {
UserManager um = new UserManager();
String registeredPassword = um.getCurrentUserDetail("user_password", getUserId());
if(getUserPassword().equals(registeredPassword)) {
String currentUserId = um.getCurrentUserDetail("user_id", userId);
int currentUserType = um.getCurrentUserType(userId);
session.put("currentUserId", (String) currentUserId);
session.put("currentUserType", (Integer) currentUserType);
System.out.println("You have successfully logged in!");
return SUCCESS;
}
System.out.println("Your login has failed!");
return ERROR;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
// getters and setters
}
<?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>
<package name="default" extends="struts-default">
<action name="login" class="com.mypackage.model.LoginAction">
<result name="success">/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="com.mypackage.model.LoginAction" %>
<head>
<%
int type = 0;
if(session.containsKey("currentUserType")) {
type = (Integer) session.get("currentUserType");
}
%>
</head>
但是,方法
containsKey()
和get()
对于会话
返回undefined。如何获取Struts2会话中的属性?这是因为从Scriptlet您正在读取HttpSession,而不是包装Struts2 SessionMap。你可以阅读
但请帮自己一个忙,避免永远完全使用scriptlet。永远
假设您真的需要为变量赋值(这可能也可以避免,但让我们先进行一小步),请按照Struts的方式进行:
还是一艘班轮
您好,index.jsp的某些部分根据类型打开/关闭(0=guest,1=admin,2=user)。不同的用户类型在同一个jsp上看到不同的东西,这就是为什么我需要在jsp中获得类型。让我发布整个index.jsp
,展示我试图实现的目标。如果您能在看到整个代码后详细介绍Action类方法,将不胜感激。谢谢。我有一个后续问题,但是是关于Struts2 if else if的。然而,我认为它可能需要它自己的线程,因为它可能会偏离这个主题。感谢您的回复。在标记中使用“value”属性而不是key
。如果他使用value,那么他也需要指定名称。键=标签+值+名称