我正在我的动作课中实施
SessionAware
。但是,sessionMap
始终是null
。 setSession()
方法好像没有被调用。
这是代码。在
execute()
方法中,sessionMap
始终为 null
。
我做错了什么?
动作类:
public class HelloWorldAction extends ActionSupport implements SessionAware
{
private static final long serialVersionUID = 544659976107736338L;
private Map<String, Object> sessionMap;
private String name;
public String execute() throws Exception {
if(sessionMap != null) {
sessionMap.put("TestID", "Test");
}
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.sessionMap = arg0;
}
}
struts xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
<package name="my-projects" namespace="/" extends="struts-default">
<action name="hello"
class="com.my.projects.actions.HelloWorldAction"
method="execute">
<result name="success">/jsp/HelloWorld.jsp</result>
</action>
你可以尝试这个来获取会话地图
Map session = ActionContext.getContext().getSession();
并删除下面的行
<include file="struts-default.xml"/>
struts-default.xml
是Struts在其核心库中使用的默认配置文件的名称。您不应在自定义配置中使用此名称。
struts2-core.jar 文件中包含一个名为
的基本配置文件。该文件自动包含在struts-default.xml
文件中,以提供标准配置设置,而无需复制它们。struts.xml
要排除
或提供您自己的版本,请参阅struts-default.xml
struts.configuration.files
中的struts.properties.
设置
从配置中删除此行:
<include file="struts-default.xml"/>
此文件可以覆盖默认设置,例如拦截器堆栈,并且您的应用程序将无法在默认模式下运行。
默认情况下,它配置为将会话填充到实现
SessionAware
的操作。