2011-01-11 5 views
0

웹상의 모든 곳에서 활동 해왔다. 나는 길을 잃어 버렸고 문제를 해결할 수 없었다.자바 객체를 서블릿에서 JSP 페이지로 전달하는 방법

Eclipse를 사용하여 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"); 

연락 "LASTNAME"와 같은 속성을 가진 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) 

메시지의 두 번째 줄은 게으른 로딩과 관련이있다 나타내지 만 마지막 줄 내가 버그가 프로그램이려고 할 때 발생하는 것을 보여줍니다 : 내가 이런 짓을 때, 나는이 메시지가 기본적으로 문자열 인 "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()을 사용해야합니다.

일반적으로,이 특별한 경우 외에,보기 층에 게으른 초기화에 문제는 다음 방법 중 하나를 사용하여 해결할 수 있습니다 말하기 :

  • 사용 Open Session in View pattern

  • 을 렌더링하기 전에 모든 필요한 데이터를 가져 오기 보기 (JOIN FETCH, Hibernate.initialize() 등 사용)

+0

답변 주셔서 감사합니다, 내 probl 해결 안에 :) – Vincent

관련 문제