2011-01-11 18 views
0

私はウェブ上のどこにいても、ほとんど失われず、問題を解決できませんでした。サーブレットからJSPページにJavaオブジェクトを(適切に)渡す方法

私はEclipseを使用してWebアプリケーションを作成しています。JSPはクライアント側に、Servet/Hibernateはサーバー側に作成しています。 私はサーブレットからJSPページにオブジェクトを渡そうとしています。 JSPページで

Contact c = dao.getContact(dataID); 

request.setAttribute("data", c); 

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

:サーブレットで

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) 

だから私は、なぜ把握することを試みたが、どこかに私は休止状態設定ファイルに「スレッド」に、現在のセッションコンテキストを設定する必要があることを読んで。

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) 

メッセージの2行目には、それが遅延読み込みを行うことを有することを示すが、最後の行は、私はバグはプログラムが取得しようとしたときに発生していることを示しています。私はこれをしなかったときしかし、私はこのメッセージが表示されます基本的には文字列である "lastname"属性なので、 "lazy loaded"とは思わない。

誰かが解決策を見つける手助けをすることができたら、それはとても親切です。 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()を使用する必要があります。

一般に、この特定のケース以外にも、ビュー層における遅延初期化の問題は、次のいずれかの方法を使用して解決することができ、話す:

  • 使用Open Session in View pattern

  • レンダリングする前に、すべての必要なデータを取得しますビュー(JOIN FETCHHibernate.initialize()などを使用して)

+0

私のproblを解決しました私:) – Vincent

関連する問題