【发布时间】:2011-08-11 19:20:35
【问题描述】:
我正在开发一个基于 Hibernate、Spring 和 Wicket 的 Web 应用程序。
到目前为止,我实现了业务对象和持久层。事务由 Spring 框架的事务拦截器管理。所以DAO类的每个方法都封装在一个事务中。与单元测试一起实现这一点很简单。
现在我来到 Web 应用程序部分,我也使用 Spring 进行依赖注入。连同 Wicket 框架的 @SpringBean 注解,我将 DAO 注入到 Wicket 组件中。但是由于我对 Wicket 还很陌生,所以在将正确的模型用于我的业务对象时,当我将它们传递给 Wicket 组件时,我有点卡住了。
我尝试了 LoadableDetachableModel,但遇到了一些问题。根据页面的输入参数,我得到一个页面来创建新的或编辑现有的业务对象。如果参数中有 id,则应从数据库中加载相应的业务对象。当没有参数时,应该创建一个新的业务对象。这部分是一个应该编辑的对象运行得很好,但是当应该创建一个新对象时,我填写了 Web 表单并按保存,我得到一个 NullPointerException。经过一些调试后,我发现 LoadableDetachableModel 无法返回业务对象的实例,因为重写的 load() 方法无法从数据库加载对象,因为它还没有保存在那里,因此没有 id。
所以现在我想知道如何解决这个问题。 LoadableDetachableModel 是正确的选择吗?是否建议将表单分成两个相互依赖的表单,每个表单使用不同的模型。所以只有编辑页面/表单使用 LoadableDetachableModel?
【问题讨论】: