在实现 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>
Action 类
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
拦截器。
An interceptor which sets action properties based on the interfaces an action implements.
因为您实现了 SessionAware
,所以拦截器应该位于堆栈上,以允许使用 servlet session 功能。
关于java - setSession() 没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23388436/