【问题标题】:How to pass (properly) a Java Object from a Servlet to a JSP page如何(正确地)将 Java 对象从 Servlet 传递到 JSP 页面
【发布时间】:2011-06-07 05:15:52
【问题描述】:

我在网络上到处都是,我有点迷茫,无法解决我的问题。

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

在小服务程序中:

Contact c = dao.getContact(dataID);

request.setAttribute("data", c);

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

在 JSP 页面中:

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

Contact 是一个 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)

消息的第二行表明它与延迟加载有关,但最后一行 i 表明当程序试图获取“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; 
    }

【问题讨论】:

    标签: hibernate jsp orm servlets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多