Agregaremos la opción de editar un registro en el Controller
public String edit() {
try {
repositoryRevisionHistory.save(revisionHistoryServices.getRevisionHistory(persona.getCedula(),
"myusername",
"update", "persona", personaRepository.toDocument(persona).toString()));
personaRepository.update(persona);
JsfUtil.successMessage("Se actualizo el documento");
} catch (Exception e) {
JsfUtil.errorDialog("edit()", e.getLocalizedMessage());
}
return "";
}
En el formulario list.xhtml debemos seleccionar un documento y pasarlo a un formulario nuevo con todos los datos.
view.xhtml
Tenemos varias formas de real izarlo
En la misma pagina mediante un dialogo
En otra pagina usando el mismo controller
En otra pagina usando un controller nuevo
Creamos una pagina nueva llamada view.xhtml
Agregamos dos etiquetas y dos cajas de texto
Asociados al enity dentro del Controller
Agregar botones para regresar al index y para invocar la pagina list
Si definimos el alcance del Controller como @ViewScoped, debemos guardar el valor seleccionado.
Creamos un método llamado go(Persona persona) y guardamos el entity seleccionado.
Jmoordb nos ofrece la clase JmoordbContext en la cual podemos guardar objetos en la sesión actual.
public String prepare(Persona persona){
try{
JmoordbContext.put("persona", persona);
JmoordbContext.put("action", "view");
} catch (Exception e) {
JsfUtil.errorDialog("edit()", e.getLocalizedMessage());
}
return "view";
}
Modificar el init()
if(JmoordbContext.get("action")!= null){
String action = (String)JmoordbContext.get("action");
if(action.equals("view")){
persona = (Persona)JmoordbContext.get("persona");
}
}
En la pagina list.xhtml
Agregar un nuevo botòn
<p:column>
<p:commandButton
icon="fa-trash-o"
value="Editar"
process=":form:datatable"
action="#{personaController.prepare(item)}"
update=":form:datatable, :form:msg" >
</p:commandButton>
Crear el archivo view.xhtml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>Editar</title>
</f:facet>
</h:head>
<h:body>
<h:form id="form" prependId="true">
<p:messages id="msg"/>
<p:panelGrid columns="2">
<p:outputLabel value="Cedula"/>
<p:inputText value="#{personaController.persona.cedula}" disabled ="true" required="true"/>
<p:outputLabel value="Nombre"/>
<p:inputText value="#{personaController.persona.nombre}" required="true"/>
<p:outputLabel value="Edad"/>
<p:inputText value="#{personaController.persona.edad}" required="true"/>
</p:panelGrid>
<p:row>
<p:column>
<p:commandButton value="edit"
action="#{personaController.edit}"
update=":form:msg, :form"/>
</p:column>
<p:column>
<p:commandButton value="list" action="list" immediate="true"/>
</p:column>
<p:column>
<p:commandButton value="index" action="index" immediate="true"/>
</p:column>
</p:row>
</h:form>
</h:body>
</f:view>
</html>
al dar clic en Editar nos muestra la pagina de EDITAR
Cambiamos el nombre y damos clic en el botòn Edit
Si presionamos el botón list para regresar al listado, observamos el registro actualizado
Recuerde que podemos ver el historial de revisiones
Podemos hacer una búsqueda del documento persona con id=3
Ejecutar desde la consola
mongo
use practica_history
db.revisionhistory.find({"document":"persona","id":"3"}).pretty()
Podemos ver el historial de cambios