2010-07-05 7 views
29

Quelqu'un peut-il recommander un cadre pour faciliter le développement de CRUD dans JSF 2.0?Cadres CRUD JSF 2.0 recommandés

Aspects mes valeurs:

  • aussi légère que possible; limitées dépendances sur les bibliothèques de tiers
  • Soutien à une évolution modèle de domaine
  • besoin limité pour le codage répétitif; support pour échafaudages et/ou métaannotations

Des indices très appréciés! Vôtre, J.

+0

Tout est tombé sur Krank, mais ce n'est pas très vivant: http : //code.google.com/p/krank/ Pas JSF2-prêt, mais j'aime les idées. Est-ce que cela inspire quelqu'un? – Jan

+0

Pourquoi ne pas utiliser un outil pouvant générer une "application crud" pour vous? Par exemple, Netbeans peut le faire http://netbeans.org/kb/docs/web/jsf20-crud.html – corsair

Répondre

46

CLMS est en effet un morceau de gâteau en utilisant JSF 2.0 fournie installation standard: un bean @ViewScoped en combinaison avec un <h:dataTable> suffit essentiellement déjà. Voici un exemple de code copié sans vergogne de 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> 

En outre, Netbeans a some useful wizards à genreate une application CRUD basé sur un modèle de données.

+0

ah, j'ai cherché cet article mais je n'ai pas pu le trouver. Et était paresseux pour donner un exemple complet moi-même :) (+1) – Bozho

+0

Oui, le code d'exemple est apprécié. Je me demande encore s'il n'y a pas moyen de générer tout ce code, piloté par un ensemble d'objets Entités annotés. – Jan

+0

La réponse ne correspond pas entièrement à toutes les exigences que j'avais en tête. Bien que cela ressemble à la meilleure réponse disponible, je vais la marquer comme acceptée. (Je suis nouveau sur StackOverflow ... Est-ce la bonne chose à faire?) – Jan

8

JSF 2.0 lui-même. CRUD est très facile à faire avec JSF seul - pas besoin de tout autre cadre. Vous avez besoin

  • 1 managed bean (annotée avec @ManagedBean)
  • 2 pages xhtml (de facelets) - une pour la liste et l'autre pour modifier/créer
  • A <h:dataTable> avec un lien/bouton edit, par lequel vous Définissez l'objet Ligne en cours dans le bean géré (en utilisant action="#{bean.edit(currentRowObject)}"). (Dans JSF 1.2 ceci a été réalisé par <f:setPropertyActionListener>)
  • méthodes d'action (void, sans arguments) pour gérer les opérations
  • @PostConstruct pour charger les données au départ.
+0

Salut Bozho, Merci pour la réponse. J'ai ajouté une «exigence» supplémentaire à la question initiale: Besoin limité de codage manuel. Je comprends votre réponse, mais sur un grand modèle de domaine, l'approche manuelle reste lourde. Je me demande si quelque chose de semblable à Grails existe, mais en JSF pur. Merci, J. – Jan

+2

Est-ce que setPropertyActionListener n'est pas nécessaire dans JSF 2.0, car on peut passer des objets en arguments? –

+0

@ Thorbjørn Ravn Andersen en effet. Merci de me le rappeler. ajouté à la réponse. – Bozho

2

J'ai eu le même problème que décrit: Création d'une application CRUD aussi rapide que possible dans JEE6.

Belle Générateur trouvé à: http://sourceforge.net/projects/jbizmo/

Après avoir défini (graphique éditeur!) votre Business-Model/Domain-Model, JBizMo crée la base de données et un CRUD-App entier de la boîte.

  • i18n, JAAS, soutenu également
  • Vues et menus sont générés
  • ... un tas de paramètres pour définir ...
+0

@ Jav_Rock, Michael Leitner Où puis-je trouver le tutoriel pour JBizMo? – Sam

+0

@Sampath le tutoriel est aussi dans la section download (= Files) de sourceforge. –

5

J'ai créé celui-ci pour accélérer le processus de jsf crud création d'application: https://github.com/ignl/happyfacescrud Recherche hors boîte, tableau de données paresseux, affichage/édition, composants personnalisés qui réduisent le code de façon spectaculaire et bien sûr flexible.

+1

Bienvenue dans Stack Overflow! Merci d'avoir posté votre réponse! Veuillez vous assurer de lire attentivement la [FAQ sur l'autopromotion] (http://stackoverflow.com/faq#promotion). Notez également qu'il est * obligatoire * que vous publiez une clause de non-responsabilité chaque fois que vous créez un lien vers votre propre site/produit. –

+0

Ok merci pour l'information! – Ignas

+0

@Ignas Est-ce que happyfacescrud peut faire du reverse engineering de base de données pour générer des pages jsf et ses beans respectifs? – Sam