使用jsf进行多个CRUD的最佳策略

时间:2009-01-29 16:18:54

标签: java hibernate jsf crud

在我的公司,我们正在使用java和jsf开发类似ERP的应用程序,到目前为止,设计团队已经确定了大约20个实体,每个实体具有不同的属性,通常我们将构建20页的CRUD,有没有更好的这样做的方法是什么?我们正在使用hibernate作为db访问,所以我们想出了单个DAO这个系统的这个部分的概念,你遇到过类似的情况吗?你有什么想法?

3 个答案:

答案 0 :(得分:2)

你真的应该看看Seam。它有一个名为Seam-Gen的功能,它将从数据库中反向设计整个应用程序CRUD页面。您可以编辑Seam-Gen模板(基于Freemarker)来自定义将根据您的喜好生成的页面。

我使用Eclipse插件Azzurri Clay来建模我的数据库并生成DDL。然后我运行Seam-Gen,几秒钟后你就有了一个正在运行的应用程序。这是一个非常方便的组合。

答案 1 :(得分:0)

您可能会考虑生成这20个屏幕的代码,就像Ruby中的脚手架一样。就DAO而言,您可以将CUD操作拉到一些通用的IBusinessObjectDao,将特定的R操作(通过各种参数查询)留给具体的DAO实现。

答案 2 :(得分:0)

我知道它已经很晚了,但我认为我的小框架完全符合这种情况。查看http://code.google.com/p/happyfacescrud/。它具有开箱即用的搜索功能,可识别实体数据类型的自定义组件,惰性数据模型以及代码生成器无法提供的灵活性。以下是关于惰性数据和搜索的页面如何显示的示例:

    <hf:searchPanel columns="4" backingBean="#{accountBean}">
        <hf:searchField label="#{messages['account.accountNumber']}" field="accountNumber" />
        <hf:searchField label="#{messages['account.active']}" field="active" isMessage="true" />
        <hf:searchEntityField label="#{messages['account.customer']}" field="customer" childField="name" popup="true" />
        <hf:searchField label="#{messages['account.openingDate']}" field="openingDate" rangeSearch="false" />
    </hf:searchPanel>
    <hf:dataList label="#{messages['account.search.results']}" backingBean="#{accountBean}">
        <hf:column label="#{messages['account.accountNumber']}" field="accountNumber" />
        <hf:column label="#{messages['account.active']}" field="active" isMessage="true" />
        <hf:column label="#{messages['account.customer']}" field="customer" childField="name" entityView="/pages/customerEdit.xhtml" popupFields="email,phone,address" />
        <hf:column label="#{messages['account.openingDate']}" field="openingDate" isDate="true" />
        <hf:actionsColumn />
    </hf:dataList>