2011-01-11 130 views
0

我在网络上到处都是,而且我迷失方向,无法解决我的问题。如何正确地将Java对象从Servlet传递到JSP页面

我使用Eclipse创建Web应用程序,在客户端使用JSP,在服务器端使用Servet/Hibernate。 我想从一个servlet传递一个对象到一个JSP页面。

在servlet:

Contact c = dao.getContact(dataID); 

request.setAttribute("data", c); 

getServletContext() 
    .getRequestDispatcher("/"+url+"?id="+dataID).forward(request, response); 

在JSP页面中:

Contact contact = (Contact)request.getAttribute("data"); 

联系是一个ORM,其中有像 “姓氏” 属性。

,但我收到此错误信息:

GRAVE: "Servlet.service()" pour la servlet GetData a généré une exception 
org.hibernate.HibernateException: No CurrentSessionContext configured! 
    at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:683) 
    at domain.DAOContact.getContact(DAOContact.java:39) 
    at domain.GetData.doGet(GetData.java:27) 

所以,我试图找出原因,并某处我读,我需要设置当前会话的上下文“线程”在Hibernate配置文件。但我这样做的时候,我得到这个消息:

GRAVE: Servlet.service() for servlet [GetData] in context with path [/CarnetContacts] threw exception [org.hibernate.LazyInitializationException: could not initialize proxy - no Session] with root cause 
org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) 
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) 
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) 
    at domain.Contact_$$_javassist_1.getLastName(Contact_$$_javassist_1.java) 

消息的第二行表明它与延迟加载做,但最后一行我表明,当该程序正在试图获得出现的bug “lastname”属性,它基本上是一个字符串,所以我不认为它是“懒加载”。

所以,如果有人能帮我找到解决方案,那将是非常善良的。在DAO方法的

代码:

public Contact getContact(int contactId){ 
     Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); 
     Transaction t = session.beginTransaction(); 
     t.begin(); 
     Contact contact =(Contact) session.load(Contact.class, new Integer(contactId)); 
     t.commit(); 
     return contact; 
    } 

回答

2

你在这种情况下,具体的问题是,你使用Session.load(),而不是Session.get()

load()返回一个延迟初始化的代理,因此它只能在特殊情况下使用,大多数情况下您需要使用get()

一般来说,除了这种特殊情况下,在视图层延迟初始化的问题,可以使用下列方法之一解决:

+0

感谢您的回答,它解决了我的PROBL时间:) – Vincent 2011-01-11 14:47:47

相关问题