为什么在Struts 2中实现SessionAware接口后SessionMap为空?

问题描述 投票:0回答:2

我正在我的动作课中实施

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>      
       
java struts2 xml-configuration struts2-interceptors
2个回答
0
投票

你可以尝试这个来获取会话地图

Map session = ActionContext.getContext().getSession();

并删除下面的行

<include file="struts-default.xml"/>

0
投票

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
的操作。

© www.soinside.com 2019 - 2024. All rights reserved.