2010-07-05 31 views
29

¿Alguien puede recomendar algún marco para facilitar el desarrollo de CRUD en JSF 2.0?Marcos CRUD JSF 2.0 recomendados

aspectos más valoro:

  • lo más ligero posible; limitados dependencias de las bibliotecas de terceros
  • Soporte para un evolución modelo de dominio
  • necesidad limitada de codificación repetitiva; soporte para andamios y/o metaanotaciones

Cualquier sugerencia muy apreciada! Atentamente, J.

+0

encontré con Krank, pero no es muy vivo: http : //code.google.com/p/krank/ No está preparado para JSF2, pero me gustan las ideas. ¿Esto inspira a alguien? – Jan

+0

¿Por qué no utilizar alguna herramienta que pueda generar una "aplicación crud" para usted? Por ejemplo, Netbeans puede hacer eso http://netbeans.org/kb/docs/web/jsf20-crud.html – corsair

Respuesta

46

CRUD es de hecho un pedazo de la torta usando JSF 2.0 instalación estándar proporcionado: un grano @ViewScoped en combinación con un <h:dataTable> básicamente ya es suficiente. Aquí hay un ejemplo de código que se copia desvergonzadamente 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. 

} 

Página:

<!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> 

Además, Netbeans tiene some useful wizards a genreate una aplicación CRUD basado en un modelo de datos.

+0

ah, busqué ese artículo pero no pude encontrarlo. Y fui perezoso para dar un ejemplo completo a mí mismo :) (+1) – Bozho

+0

Sí, se agradece el código de ejemplo. Todavía me pregunto si no hay una forma de generar todo este código, impulsado por un conjunto de objetos Entity anotados. – Jan

+0

La respuesta no se ajusta por completo a todos los requisitos que tenía en mente. Sin embargo, parece ser la mejor respuesta disponible, así que la marcaré como aceptada. (Soy nuevo en StackOverflow ... ¿Es esto lo correcto?) – Jan

8

JSF 2.0 en sí. CRUD es muy fácil de hacer solo con JSF, sin necesidad de ningún otro marco. Es necesario

  • 1 bean gestionado (anotado con @ManagedBean)
  • 2 páginas XHTML (facelets) - uno de la lista y otro para editar/crear
  • Un <h:dataTable> con un botón/edit enlace, por el cual se establecer el objeto de la fila actual en el bean administrado (usando action="#{bean.edit(currentRowObject)}"). (En JSF 1.2 esto se logró por <f:setPropertyActionListener>)
  • métodos de acción (void, sin argumentos) para manejar las operaciones
  • @PostConstruct para cargar los datos inicialmente.
+0

Hola Bozho, Gracias por la respuesta. He añadido un 'requisito' adicional a la pregunta original: Necesidad limitada de codificación manual. Entiendo su respuesta, pero en un modelo de dominio grande, el enfoque manual sigue siendo engorroso. Me pregunto si existe algo parecido a Grails, pero en JSF puro. Gracias, J. – Jan

+2

¿No se ha establecido setPropertyActionListener en JSF 2.0, ya que podemos pasar objetos como argumentos? –

+0

@ Thorbjørn Ravn Andersen de hecho. gracias por recordarme. agregado a la respuesta. – Bozho

2

que tenía el mismo problema como se describe: Creando la aplicación CRUD lo más rápido posible en JEE6.

Hermosa Generador encontrar en: http://sourceforge.net/projects/jbizmo/

Después de definir (Gráfico-Editor!) su modelo de negocio/modelo de dominio, JBizMo crea la base de datos y toda una aplicación CRUD desde el primer momento.

  • i18n, JAAS, también apoyó
  • Vistas y menús se generan
  • ... un montón de parámetros para definir ...
+0

@ Jav_Rock, Michael Leitner ¿Dónde puedo encontrar el tutorial de JBizMo? – Sam

+0

@Sampath, el tutorial también se encuentra en la sección de descarga (= Files) de sourceforge. –

5

creé éste para acelerar el proceso de jsf crud application creation: https://github.com/ignl/happyfacescrud Búsqueda fuera de cuadro, tabla de datos diferida, visualización/edición, componentes personalizados que reducen el código dramáticamente y, por supuesto, son flexibles.

+1

¡Bienvenido a Stack Overflow! ¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion). También tenga en cuenta que * se requiere * que publique un descargo de responsabilidad cada vez que se vincula a su propio sitio/producto. –

+0

Ok gracias por la información! – Ignas

+0

@Ignas ¿Happyfacescrud puede hacer ingeniería inversa de bases de datos para generar páginas jsf y sus respectivos beans? – Sam

Cuestiones relacionadas