【发布时间】:2013-12-23 02:26:10
【问题描述】:
我正在使用 Vaadin 7 + Grails 2.3,有一些问题
我的域类
class Base {
private static final Date NULL_DATE = new Date(0)
Date createdAt = NULL_DATE;
Date updatedAt = NULL_DATE;
def beforeInsert(){
createdAt = new Date();
updatedAt = new Date();
}
def beforeUpdate(){
updatedAt = new Date();
}
static mapping = {
autoTimestamp true
}
}
abstract class Person extends Base{
String name;
String name2;
String phone1;
String phone2;
static constraints = {
name2 nullable:true
phone1 nullable:true
phone2 nullable:true
}
}
class Customer extends Person {
double credit;
}
问题
问题 1
在我的 Vaadin 类 UI 中,如果我尝试这样做
class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
Customer customer = new Customer()
customer.name="RODRIGO"
customer.save()
}
}
显示这个错误
servlet [VaadinServlet 0] 在路径 [/AgileWeb] 的上下文中的 Servlet.service() 引发异常 [com.vaadin.server.ServiceException: groovy.lang.MissingPropertyException: 没有这样的属性:类的名称:agileweb.Customer 可能的解决方案:全部] 有根本原因 消息:没有此类属性:类名称:agileweb.Customer 可能的解决方案:全部
没有“名称”属性? Customer 类扩展了具有此属性的 Person。
问题 2
如果我试试这个
Customer customer = new Customer()
Customer.setName("RODRIGO")
Customer.save()
显示错误:消息:没有 Hibernate Session 绑定到线程,并且配置不允许在此处创建非事务性会话
我已经了解了这个错误,但我不知道如何修复它,也许我是 Grails 的新手
问题 3 - 实际上是一个问题
我知道我可以使用 BeanItemContainer,只是来自 List 对象,这可能没有问题,但 BeanItemContainer 不是延迟加载,我想使用 HbnContainer 插件 (https://vaadin.com/directory#addon/hbncontainer) 因为它只需要一个休眠会话,那么我如何才能获得“Hibernante session”,是否有任何示例以及如何做到这一点?
问题 4 - 实际上是一个问题(再次)
按照本教程https://vaadin.com/wiki/-/wiki/Main/Vaadin%20on%20Grails%20-%20Database%20access
它可以将对象保存在数据库中,但是问题 - 真的有必要为每个域类创建一个服务吗?我读过建议将域逻辑放在服务中,我同意这一点,但是不需要任何逻辑的简单域呢?
- 那么,是否有可能为服务创建类似 DAO 的东西?有没有什么服务设计可以避免重复代码只是为了保存对象?
我知道有很多问题,但我认为这些问题与其他问题相同,我真的很想使用 Vaadin + Grails 来享受两者的优势,但目前对我来说并不容易!
【问题讨论】:
-
我计划在 vaadin.com 上发布更多教程。这些问题将有助于选择主题。谢谢。