2011-12-06 1 views
1

S'il vous plaît quelqu'un me sauver, je ne peux pas charger paresseux ma classe, j'ai essayé d'écrire stratégie Open Session In View, mais il semble ne pas fonctionner. web.xml:OpenSessionInViewFilter ne fonctionne pas

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>0</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>charsetFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>charsetFilter</filter-name> 
     <url-pattern>*.do</url-pattern> 
    </filter-mapping> 

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-servlet.xml 
     </param-value> 
    </context-param> 

    <filter> 
     <filter-name>hibernateFilter</filter-name> 
     <filter-class> 
      org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>hibernateFilter</filter-name> 
     <url-pattern>*.do</url-pattern> 
    </filter-mapping> 

</web-app> 

Voici mon ressort servlet.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
     http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

    <context:annotation-config /> 
    <tx:annotation-driven transaction-manager="txManager" /> 
    <bean id="txManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory"> 
      <ref local="sessionFactory" /> 
     </property> 
    </bean> 
    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/spring/" /> 
     <property name="suffix" value=".jsp" /> 
     <property name="order" value="0" /> 
    </bean> 

    <bean id="pdfViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"> 
    <property name="order" value="1"/> 
    <property name="location" value="/WEB-INF/simpleviews.xml"/> 
    </bean> 

    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

    <bean class="org.springframework.jmx.export.MBeanExporter"> 
     <property name="autodetect" value="false" /> 
     <property name="assembler"> 
      <bean id="jmxAssembler" 
       class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> 
       <property name="attributeSource"> 
        <bean 
         class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" /> 
       </property> 
      </bean> 
     </property> 
    </bean> 
    <context:component-scan base-package="**" /> 
    <bean id="messageSource" 
     class="org.springframework.context.support.ResourceBundleMessageSource" 
     p:basename="messages" /> 



    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <!-- some properties --> 
    </bean> 


    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan"> 
      <list> 
       <value>pl.edm.taskcards.spring</value> 
       <value>pl.raban.resource.spring</value> 
       <value>pl.raban.common.dictionary.spring</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.connection.useUnicode">true</prop> 
       <prop key="hibernate.connection.characterEncoding">UTF-8</prop> 
       <prop key="hibernate.jdbc.batch_size">0</prop> 
       <prop key="hibernate.query.substitutions">true 1, false 0</prop> 
      </props> 
     </property> 
    </bean> 
    <tx:annotation-driven /> 
</beans> 

Mes BookDAO.class:

@Component 
public class BookDAO { 

    @Bean 
    public BookDAO bookDAO(){ 
     return new BookDAO(); 
    } 

    @Autowired 
    private SessionFactory sessionFactory; 

    private HibernateTemplate hibernateTemplate; 
    @Autowired 
    public void setSessionFactory(SessionFactory sessionFactory){ 
     this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
    } 

    public void save(Book book){ 
     hibernateTemplate.save(book); 
    } 


    public void update(Book book){ 
     book.setModifyTime(new Date()); 
     hibernateTemplate.update(book); 
    } 

    public void delete(Book book){ 
     hibernateTemplate.delete(book); 
    } 

    public List<Book> list(String content, String status, String dprt, String wdz){ 
     Session session = hibernateTemplate.getSessionFactory().getCurrentSession(); 
     Criteria crit = session.createCriteria(Book.class); 
     return list; 

    } 
    public Book getbookById(int id){ 
     return (Book)hibernateTemplate.get(Book.class, id); 
    } 
} 

et mon contrôleur:

@RequestMapping(value="/book.do", method=RequestMethod.GET) 
    @Transactional(rollbackFor=Exception.class) 
    public ModelAndView viewGET(HttpServletRequest request, 
      HttpServletResponse response) throws Exception{ 
     Book book = bookDAO.getbookById(id); 
     modelMap.addAttribute("book", book); 
     return new ModelAndView("book", modelMap); 
    } 

Quand je veux aller sur mon livre.j sp (book.do dans le navigateur) site, je suis exception:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: pl.edm.taskcards.spring.Book.ChapterList, no session or session was closed 
    org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380) 
    org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372) 
    org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365) 
    org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108) 
    org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:366) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:242) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:173) 
    javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:271) 
    org.apache.jsp.WEB_002dINF.spring.kartaZadan_jsp._jspx_meth_c_005fforEach_005f0(kartaZadan_jsp.java:1861) 
    org.apache.jsp.WEB_002dINF.spring.kartaZadan_jsp._jspService(kartaZadan_jsp.java:340) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
+0

Utilisez-vous Hibernate comme fournisseur JPA, ou utilisez-vous le HibernateSession? – Ralph

+0

J'utilise Hibernate. – Cichy

Répondre

4

Essayez de changer la configuration de votre filtre:

<filter> 
    <filter-name>hibernateFilter</filter-name> 
    <filter-class> 
     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>hibernateFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 
+0

Je ne sais pas à propos de l'affiche originale, mais cela a juste résolu mon problème. Quatre heures de recherche d'une solution sont enfin terminées! – Marvo

Questions connexes