在实现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()上的回调。请指出我的错误。

最佳答案

是的,您需要servletConfig拦截器。


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


因为实现了SessionAware,所以拦截器应该在堆栈上,以允许使用Servlet会话功能。

08-16 23:02