在实现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会话功能。