example - java jsf jpa
Recomendaciones JSF 2.0 CRUD marcos (6)
¿Alguien puede recomendar algún marco para facilitar el desarrollo de CRUD en JSF 2.0?
Aspectos que más valoro:
- Tan ligero como sea posible; dependencias limitadas en bibliotecas de terceros
- Soporte para un modelo de dominio en evolución
- Necesidad limitada de codificación repetitiva; soporte para andamios y / o metaanotaciones
Cualquier sugerencia muy apreciada! Atentamente, J.
Creé este para acelerar el proceso de creación de aplicaciones crud jsf: https://github.com/ignl/happyfacescrud Búsqueda fuera de cuadro, tabla de datos vagos, visualización / edición, componentes personalizados que reducen el código de forma espectacular y, por supuesto, flexibles.
Encontré este artículo útil también:
CRUD conversacional en Java EE 6
http://www.andygibson.net/blog/tutorial/pattern-for-conversational-crud-in-java-ee-6/
Por Andy Gibson
Encontré un generador de crud de fuente abierta para JSF + Primefaces
http://minuteproject.wikispaces.com/Primefaces
Y también genera problemas para la mayoría de los marcos http://minuteproject.wikispaces.com/
JSF 2.0 en sí. CRUD es muy fácil de hacer solo con JSF, sin necesidad de ningún otro marco. Necesitas
- 1 bean administrado (anotado con
@ManagedBean
) - 2 páginas xhtml (facelets): una para la lista y otra para editar / crear
- A
<h:dataTable>
con un enlace / botón deedit
, mediante el cual establece el objeto de la fila actual en el bean administrado (usandoaction="#{bean.edit(currentRowObject)}"
). (En JSF 1.2 esto fue logrado por<f:setPropertyActionListener>
) - Métodos de acción (
void
, sin argumentos) para manejar las operaciones -
@PostConstruct
para cargar los datos inicialmente.
Tuve el mismo problema que el descrito: crear la aplicación CRUD lo más rápido posible en JEE6.
Beautiful Generator encontrado en: http://sourceforge.net/projects/jbizmo/
Después de definir (¡Graph-Editor!) Su Business-Model / Domain-Model, JBizMo crea la base de datos y toda una aplicación CRUD fuera de la caja.
- i18n, JAAS, también compatible
- Se generan vistas y menús
- ... un conjunto de parámetros para definir ...
CRUD es de hecho un pedazo de pastel usando JSF 2.0 con la instalación estándar: un frijol @ViewScoped
en combinación con una <h:dataTable>
básicamente ya es suficiente. Aquí hay un ejemplo de código que se copia descaradamente de este artículo .
Frijol:
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 algunos asistentes útiles para generar genéticamente una aplicación CRUD basada en un modelo de datos.