2010-07-05 98 views
29

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

方面I值最:

  • 作为轻质成为可能; 第三方库有限依赖
  • 支持的进化域模型
  • 有限公司需要进行重复编码;支持脚手架和/或metaannotations

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

+0

跨越Krank刚刚来到框架的CRUD,但它不是非常活跃:HTTP ://code.google.com/p/krank/不支持JSF2,但我喜欢这些想法。这是否激励某人? – Jan 2010-07-06 14:51:39

+0

为什么不使用一些可以为你生成“crud应用程序”的工具?例如,Netbeans可以这样做http://netbeans.org/kb/docs/web/jsf20-crud.html – corsair 2012-09-13 12:35:20

回答

46

CRUD确实是使用JSF 2.0提供的标准设施的一块蛋糕:@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到genreate基于一个数据模型一个CRUD应用。

+0

啊,我找了那篇文章,但找不到它。并且懒得给我一个完整的例子:)(+1) – Bozho 2010-07-05 16:20:09

+0

是的,示例代码表示赞赏。仍然我想知道是否没有办法生成所有这些代码,由一组注释的实体对象驱动。 – Jan 2010-07-05 16:31:54

+0

答案并不完全符合我心中的所有要求。虽然,它看起来是可用的最佳答案,所以我会将其标记为已接受。 (我是StackOverflow的新手......这是正确的做法吗?) – Jan 2010-07-07 10:43:44

8

JSF 2.0本身。 CRUD很容易处理JSF,不需要任何其他框架。您需要

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

Hi Bozho, 谢谢你的回复。 我对原始问题添加了一个额外'要求':手动编码的需求有限。 我理解你的答案,但在大型领域模型中,手动方法仍然很麻烦。 我想知道是否存在类似Grails的东西,但在纯JSF中。 谢谢J. – Jan 2010-07-05 16:18:30

+2

在JSF 2.0中不需要setPropertyActionListener,因为我们可以传递对象作为参数吗? – 2010-07-06 06:40:30

+0

@ThorbjørnRavn Andersen确实。谢谢你提醒我。添加到答案中。 – Bozho 2010-07-06 07:02:09

2

我有同样的问题描述:在JEE6中尽可能快地创建CRUD-App。

美丽的发电机在发现:http://sourceforge.net/projects/jbizmo/

定义(图形编辑器后!)您的业务模型/域模型,JBizMo创建数据库和一个完整的CRUD-App。

  • 国际化,JAAS,还支持
  • 视图和菜单生成
  • ...一堆参数来定义...
+0

@ Jav_Rock,Michael Leitner我在哪里可以找到JBizMo的教程? – Sam 2013-08-27 07:59:04

+0

@Sampath本教程也位于sourceforge的下载(= Files)部分。 – 2013-12-30 18:49:20

5

我创造了这个一个加快的过程jsf crud应用程序创建:https://github.com/ignl/happyfacescrud 即时搜索,懒惰数据表,查看/编辑,自定义组件,大幅降低代码,当然灵活。

+1

欢迎来到Stack Overflow!感谢您发布您的答案!请务必仔细阅读[自助推广常见问题](http://stackoverflow.com/faq#promotion)。另请注意,每次链接到您自己的网站/产品时,您都必须*发布免责声明。 – 2012-11-05 19:25:37

+0

好的谢谢你的信息! – Ignas 2012-11-05 19:54:10

+0

@Ignas happyfacescrud是否可以执行数据库逆向工程来生成jsf页面及其各自的bean? – Sam 2013-08-29 17:49:05