2

在我实现的动作类中SessionAware,它setSession()没有被调用。我execute()直接收到回调。

以下是一些相关细节:

Struts.xml

<package name="profile" extends="struts-default" namespace="/profile">
    <result-types>
        <result-type name="dispatcher"
            class="org.apache.struts2.dispatcher.ServletDispatcherResult"
            default="true" />
        <result-type name="tiles"
            class="org.apache.struts2.views.tiles.TilesResult"></result-type>
    </result-types>
    <interceptors>
        <interceptor name="authenticationinterceptor"
            class="interceptors.common.AuthenticationInterceptor"></interceptor>
        <interceptor-stack name="secureInterceptor">
            <interceptor-ref name="authenticationinterceptor"></interceptor-ref>
        </interceptor-stack>
    </interceptors>

    <action name="staff" class="actions.profile.StaffProfileAction">
        <interceptor-ref name="secureInterceptor"></interceptor-ref>
        <result name="success" type="tiles">/profilestaff.tiles</result>
    </action>

</package>

动作类

public class StaffProfileAction extends ActionSupport implements SessionAware {
    SessionMap<String, Object> sessionmap;

    public String execute() throws Exception {

    }

    @Override
    public void setSession(Map<String, Object> session) {
        logger.info("StaffProfileAction->setSession");
        sessionmap = (SessionMap<String, Object>) session;

    }
}

我没有使用默认堆栈中的任何拦截器。我是否需要添加任何拦截器才能在setSession(). 请指出我的错误。

4

1 回答 1

2

是的,你需要servletConfig拦截器。

一个拦截器,它根据动作实现的接口设置动作属性。

因为您实现SessionAware的拦截器应该在堆栈上以允许使用 servlet 会话功能。

于 2014-04-30T13:14:33.113 回答