
Question:
Can somebody recommend any framework to facilitate CRUD development in JSF 2.0?
Aspects I value most:
- As lightweight as possible; limited dependencies on third party libraries
- Support for an evolving domain model
- Limited need for repetitive coding; support for scaffolding and/or metaannotations
Any hints highly appreciated! Yours, J.
Solution:1
CRUD is indeed a piece of cake using JSF 2.0 provided standard facility: a @ViewScoped
bean in combination with a <h:dataTable>
basically already suffices. Here's a code example which is shamelessly copied from this article.
Bean:
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. }
Page:
<!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>
Further, Netbeans has some useful wizards to genreate a CRUD application based on a datamodel.
Solution:2
JSF 2.0 itself. CRUD is very easy to do with JSF alone - no need for any other framework. You need
- 1 managed bean (annotated with
@ManagedBean
) - 2 xhtml pages (facelets) - one for list and one for edit/create
- A
<h:dataTable>
with anedit
link/button, by which you set the current row object in the managed bean (usingaction="#{bean.edit(currentRowObject)}"
). (In JSF 1.2 this was achieved by<f:setPropertyActionListener>
) - Action methods (
void
, with no arguments) to handle the operations -
@PostConstruct
to load the data initially.
Solution:3
I created this one to speed up process of jsf crud application creation: https://github.com/ignl/happyfacescrud Out of box search, lazy data table, viewing/editing, custom components that reduces code dramatically and of course flexible.
Solution:4
I found this article useful as well:
Conversational CRUD in Java EE 6
http://www.andygibson.net/blog/tutorial/pattern-for-conversational-crud-in-java-ee-6/
By Andy Gibson
Solution:5
I had the same problem as described: Creating as-fast-as-possible CRUD-App in JEE6.
Beautiful Generator found at: http://sourceforge.net/projects/jbizmo/
After defining (Graph-Editor!) your Business-Model/Domain-Model, JBizMo creates the database and a whole CRUD-App out of the Box.
- i18n, JAAS, also supported
- Views and Menus are generated
- ... a bunch of parameters to define ...
Solution:6
I found an opensource crud generator for JSF+Primefaces
http://minuteproject.wikispaces.com/Primefaces
And also it generate crud for most of the frameworks http://minuteproject.wikispaces.com/
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon