【问题标题】:load data from data base by ajax request by primefaces "selectOnemenu" componentprimefaces“selectOnemenu”组件通过ajax请求从数据库加载数据
【发布时间】:2012-07-19 07:31:25
【问题描述】:

我用 spring3 和 hibernate3 和 jsf2 和 primefaces..

当我尝试从数据库加载数据时遇到问题,我得到空指针异常,因为会话工厂为空!

我认为问题出在:

当我在 viewscoped 中创建 managedBean 时,它给了我“不可序列化异常”,所以我让所有类成员实现可序列化,但它也给了我不可序列化异常,但对于此类“org.springframework.orm.hibernate3. LocalSessionFactoryBean”,所以我将会话工厂设置为瞬态。

在我使会话工厂瞬态后,应用程序工作正常,但如果我发出 ajax 请求,会话工厂为空,所以我有空指针异常!!!

任何帮助将不胜感激..

谢谢提前

【问题讨论】:

  • answer here 为您提供解决问题的方法
  • 感谢您的回复.. 但是如何从 dao 手动调用反序列化挂钩方法?
  • 它们是钩子方法,在序列化和反序列化过程中会自动调用,您不需要调用它,只需确保反序列化钩子方法能够将实例设置为适当的值。
  • 太棒了,效果很好,但我认为这不是最好的方法。每次我需要提供参考时,我都应该创建新的会话工厂!

标签: spring hibernate jsf-2 primefaces


【解决方案1】:

没有真正创建一个新的会话工厂

你使用的是spring,所以参考树一定是什么

ManagedBean -> Spring Service -> Spring Repository

您的托管 bean 应该引用服务层(单例)。您应该将此引用标记为瞬态并从方法挂钩中的应用程序上下文中获取。

服务 bean 将始终可从上下文中获得,您不必重新创建任何实例,只需从上下文中将其取回即可。

至于休眠,它应该在存储库层中,并且由于您已保护服务层免受序列化,因此存储库将不会被序列化,因此不会出现上述问题。

@ViewScoped
public class ManagedBean implements Serializable {

  @Autowired private transient Service service;

}

@Service
public class ServiceImpl implements Service{

 @Autowired private Repository repository;

}

@Repository
public class RepositoryImpl extends HibernateDaoSupport implements Repository {

  //here you can have hibernate session factory injected for dao support
}

希望对你有帮助!!!!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 2011-08-25
    • 2019-04-04
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多