Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recommended JSF 2.0 CRUD frameworks [closed]

Tags:

java

jsf

jsf-2

crud

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.

like image 241
Jan Avatar asked Jul 05 '10 14:07

Jan


People also ask

What is JSF 2?

JavaServer Faces (JSF) 2.0, is an MVC web framework which focus on simplifies building user interfaces (comes with 100+ ready UI tags) for Java web application and make reusable UI component easy to implement. Unlike JSF 1. x, almost everything is declared in faces-config.


2 Answers

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.

like image 144
BalusC Avatar answered Sep 28 '22 11:09

BalusC


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 (using action="#{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.
like image 40
Bozho Avatar answered Sep 28 '22 11:09

Bozho