各位好,现在系统使用 struts2 + hibernate + spring 框架,登陆后页面是由好几个frame组成的,我在其中一个 frame 中使用 dwr 调用后台action,把一些值存在session中,然后刷新另外一个frame,但是在取session时,有的时候能取到,有的时候取的却是空,很郁闷,贴代码看看,action 类中的方法: public Map getPropertyByCode( String appCode ) {
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();//有时候能取到,有的时候取到的是 null。。
Map businessTypeMap = new TreeMap();
List appVtreeList = appTypeService.findAppVtreeByCode(appCode);

}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>
    <constant name="struts.objectFactory" value="spring"/>
    <constant name="struts.devMode" value="true"/>
    
    <package name="sunyard" extends="struts-default">
     <interceptors>
     <interceptor name="sessionInterceptor" class="com.sunyard.insurance.ecm.interceptor.Myinterceptor">
     </interceptor>
     <interceptor-stack name="myInterceptor">
<interceptor-ref name="sessionInterceptor"/>  
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
     </interceptors>
     <default-interceptor-ref name="myInterceptor"/> 
        <action name="login" method="login" class="loginAction">
            <result name="success">/public/frame/imageScan/imageScanMain.jsp</result>
            <result name="input">/index.jsp</result>
        </action>
        <action name="view" class="viewManageAction">
<result name="success">/public/frame/imageQuery/imageQueryView.jsp</result>
</action>

<action name="viewTemp" class="viewManageAction">
<result name="success">/index.jsp</result>
</action>
<action name="imageShow" method="getImagePhoto" class="viewManageAction">
<result name="imagePhoto">/public/view/imagePhoto.jsp</result>
</action>
    </package>
</struts>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>SunECM</display-name>

<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>/WEB-INF/conf/applicationContext*.xml</param-value>  
    </context-param>  
<!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 -->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>pollAndCometEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>
allowGetForSafariButMakeForgeryEasier
</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
  <session-config>
   <session-timeout>30</session-timeout>
  </session-config>
<welcome-file-list id="WelcomeFileList">
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
dwr.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
  <allow>
    <create javascript="appType" creator="spring">
     <param name="beanName" value="appType"></param>
    </create>
  </allow>
</dwr>
有时候能取到,有时候取不到,真是很郁闷呢,高手来看看啊。

解决方案 »

  1.   

    应该加个判断语句什么的,,如果取不到怎么办,取到怎么办,
    这个是不是只是在用dwr第一次时取不到吧
      

  2.   

    <interceptor-stack name="myInterceptor"> 
    <interceptor-ref name="sessionInterceptor"/>   // 去掉
    <interceptor-ref name="defaultStack"/> 
    </interceptor-stack> 
      

  3.   

    应该是dwr存入session的方法问题。把代码贴出来...............
      

  4.   

    <session-config> 
      <session-timeout>30 </session-timeout> 
    </session-config> 
    session是否失效?