推荐的 JSF 2.0 CRUD 框架 [关闭]

Posted

技术标签:

【中文标题】推荐的 JSF 2.0 CRUD 框架 [关闭]【英文标题】:Recommended JSF 2.0 CRUD frameworks [closed] 【发布时间】:2011-03-11 23:00:48 【问题描述】:

有人可以推荐任何框架来促进 JSF 2.0 中的 CRUD 开发吗?

我最看重的方面:

尽可能轻巧; 有限对第三方库的依赖 支持不断发展的领域模型 重复编码的需求有限;支持脚手架和/或元注释

高度赞赏任何提示! 你的, J.

【问题讨论】:

刚刚遇到 Krank,但它还不是很活跃:code.google.com/p/krank 还没有 JSF2 就绪,但我喜欢这些想法。这对某人有启发吗? 为什么不使用一些可以为您生成“粗略应用程序”的工具呢?例如,Netbeans 可以做到这一点netbeans.org/kb/docs/web/jsf20-crud.html 【参考方案1】:

JSF 2.0 本身。单独使用 JSF 很容易实现 CRUD - 不需要任何其他框架。你需要

1 个托管 bean(用 @ManagedBean 注释) 2 个 xhtml 页面(facelets) - 一个用于列表,一个用于编辑/创建 带有edit 链接/按钮的<h:dataTable>,您可以通过它在托管bean 中设置当前行对象(使用action="#bean.edit(currentRowObject)")。 (在 JSF 1.2 中,这是由 <f:setPropertyActionListener> 实现的) 处理操作的操作方法(void,不带参数) @PostConstruct 初始加载数据。

【讨论】:

您好,博卓,谢谢您的回复。我在原始问题中添加了一个额外的“要求”:对手动编码的需求有限。我理解您的回答,但在大型域模型上,手动方法仍然很麻烦。我想知道是否存在类似 Grails 的东西,但在纯 JSF 中。谢谢你,J。 JSF 2.0 中是否不需要 setPropertyActionListener,因为我们可以将对象作为参数传递? @Thorbjørn Ravn Andersen 确实如此。谢谢你提醒我。添加到答案中。【参考方案2】:

使用 JSF 2.0 提供的标准工具,CRUD 确实是小菜一碟:@ViewScoped bean 结合 <h:dataTable> 基本上已经足够了。这是一个从this article无耻复制的代码示例。

豆子:

package com.example;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Bean implements Serializable 

    private List<Item> list;
    private Item item = new Item();
    private boolean edit;

    @PostConstruct
    public void init() 
        // list = dao.list();
        // Actually, you should retrieve the list from DAO. This is just for demo.
        list = new ArrayList<Item>();
        list.add(new Item(1L, "item1"));
        list.add(new Item(2L, "item2"));
        list.add(new Item(3L, "item3"));
    

    public void add() 
        // dao.create(item);
        // Actually, the DAO should already have set the ID from DB. This is just for demo.
        item.setId(list.isEmpty() ? 1 : list.get(list.size() - 1).getId() + 1);
        list.add(item);
        item = new Item(); // Reset placeholder.
    

    public void edit(Item item) 
        this.item = item;
        edit = true;
    

    public void save() 
        // dao.update(item);
        item = new Item(); // Reset placeholder.
        edit = false;
    

    public void delete(Item item) 
        // dao.delete(item);
        list.remove(item);
    

    public List<Item> getList() 
        return list;
    

    public Item getItem() 
        return item;
    

    public boolean isEdit() 
        return edit;
    

    // Other getters/setters are actually unnecessary. Feel free to add them though.


页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Really simple CRUD</title>
    </h:head>
    <h:body>
        <h3>List items</h3>
        <h:form rendered="#not empty bean.list">
            <h:dataTable value="#bean.list" var="item">
                <h:column><f:facet name="header">ID</f:facet>#item.id</h:column>
                <h:column><f:facet name="header">Value</f:facet>#item.value</h:column>
                <h:column><h:commandButton value="edit" action="#bean.edit(item)" /></h:column>
                <h:column><h:commandButton value="delete" action="#bean.delete(item)" /></h:column>
            </h:dataTable>
        </h:form>
        <h:panelGroup rendered="#empty bean.list">
            <p>Table is empty! Please add new items.</p>
        </h:panelGroup>
        <h:panelGroup rendered="#!bean.edit">
            <h3>Add item</h3>
            <h:form>
                <p>Value: <h:inputText value="#bean.item.value" /></p>
                <p><h:commandButton value="add" action="#bean.add" /></p>
            </h:form>
        </h:panelGroup>
        <h:panelGroup rendered="#bean.edit">
            <h3>Edit item #bean.item.id</h3>
            <h:form>
                <p>Value: <h:inputText value="#bean.item.value" /></p>
                <p><h:commandButton value="save" action="#bean.save" /></p>
            </h:form>
        </h:panelGroup>
    </h:body>
</html>

此外,Netbeans 有 some useful wizards 来基于数据模型生成 CRUD 应用程序。

【讨论】:

啊,我找了那篇文章,但找不到。而且懒得自己举一个完整的例子:) (+1) 是的,示例代码值得赞赏。我仍然想知道是否没有办法生成所有这些代码,由一组带注释的实体对象驱动。 答案并不完全符合我的所有要求。不过,它看起来是可用的最佳答案,因此我将其标记为已接受。 (我是 *** 的新手......这是正确的做法吗?) 您也可以考虑使用 Netbeans 的内置向导。我编辑了答案以包含一个链接。 @Matt:别想了。也许您只需要将项目添加到列表中?【参考方案3】:

我发现这篇文章也很有用:

Java EE 6 中的对话式 CRUD

http://www.andygibson.net/blog/tutorial/pattern-for-conversational-crud-in-java-ee-6/

安迪·吉布森

【讨论】:

【参考方案4】:

我遇到了与描述相同的问题:在 JEE6 中创建尽可能快的 CRUD-App。

美丽的生成器位于:http://sourceforge.net/projects/jbizmo/

在定义(图形编辑器!)您的业务模型/域模型后,JBizMo 会立即创建数据库和整个 CRUD 应用程序。

i18n,JAAS,也支持 生成视图和菜单 ...一堆要定义的参数...

【讨论】:

@Jav_Rock,Michael Leitner 在哪里可以找到 JBizMo 的教程? @Sampath 教程也在 sourceforge 的下载 (=Files) 部分。【参考方案5】:

我创建这个是为了加快 jsf crud 应用程序的创建过程:https://github.com/ignl/happyfacescrud 开箱即用的搜索、惰性数据表、查看/编辑、显着减少代码的自定义组件,当然也很灵活。

【讨论】:

欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。 @Ignashappyfacescud 是否可以进行数据库逆向工程以生成 jsf 页面及其各自的 bean?【参考方案6】:

我找到了一个 JSF+Primefaces 的开源 crud 生成器

http://minuteproject.wikispaces.com/Primefaces

而且它还为大多数框架生成杂物http://minuteproject.wikispaces.com/

【讨论】:

以上是关于推荐的 JSF 2.0 CRUD 框架 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

jsf 1.2和jsf 2.0之间的区别

带有 Eclipse 和 Tomcat 的 JSF 2.0 教程 [关闭]

JSF 2.0 验证码如何工作

JSF 2.0 与 Wicket 与 SpringMVC 3.x 的特殊要求

将 jsf 1.2 迁移到 2.0 时出错

从 JSF 1.2 迁移到 JSF 2.0 后,每次导航都出现 ViewExpiredException