toolbarsave
Crea el botón Guardar e invoca el método save() del controller
Se usa en los formularios new.xhtml métodos
No es necesario crear el código save() en cada Controller esta implementado dentro de la interfaz IController
beforeSave() lo implementamos para hacer operaciones antes de guardar el documento
afterSave(). Es un aspecto que inyectamos después de haber guardado el documento.
Recuerde haber configurado el LoginController para los atributos en el ExternalContext.
Internamente guarda el UserInfo en el entity actuali
Atributo
Type
Descripciòn
rendered
controller
type="java.lang.Object"
Controller
entity
type="java.lang.Object"
Entity
repository
type="com.avbravo.jmoordb.mongodb.repository.Repository"
Repositorio
searchbyfieldsecond
default="false" type="java.lang.Boolean"
indica si se debe buscar por un campo secundario

Uso
<extension:save rendered="#{rolController.writable and applicationMenu.rol.create}"
controller="#{rolController}"
entity="#{rolController.rol}"
repository ="#{rolController.rolRepository}"
primarykeyvalue="#{rolController.rol.idrol}"
searchbyfieldsecond="false"
fieldsecondaryname="activo"
fieldsecondaryvalue="si"
/>
Ejemplo 1: Guardar entity con llave primaria String.
Modulo: Rol
Formulario: new.xhtml
<jmoordbjsf:toolbarsave
rendered="#{rolController.writable and applicationMenu.rol.create}"
controller="#{rolController}"
entity="#{rolController.rol}"
repository="#{rolController.rolRepository}"
/>
RolController.java
No tenemos que definir el método save(), se invocara el de la interface IController
Podemos usar beforeSave() si deseamos agregar atributos o realizar operaciones sobre el entity antes de guardarlo
En el ejemplo agregamos información al atributo UserInfo del entity antes de guardarlo
@Aspect
@Override
public Boolean beforeSave(){
try {
return true;
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
}
return false;
}
Si deseamos implementar el método en RolController.java
No es necesario ya que esta en la interface.
@Override
public String save() {
try {
rol.setIdrol(rol.getIdrol().toUpperCase());
Optional<Rol> optional = rolRepository.findById(rol);
if (optional.isPresent()) {
JsfUtil.warningMessage(rf.getAppMessage("warning.idexist"));
return null;
}
rol.setUserInfo(userInfoServices.generateListUserinfo(loginController.getUsername(), "create"));
if (rolRepository.save(rol)) {
revisionHistoryStoreejbRepository.save(revisionHistoryServices.getRevisionHistory(rol.getIdrol(), loginController.getUsername(),
"create", "rol", rolRepository.toDocument(rol).toString()));
JsfUtil.successMessage(rf.getAppMessage("info.save"));
reset();
} else {
JsfUtil.successMessage("save() " + rolRepository.getException().toString());
}
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
}
return "";
}// </editor-fold>
Ejemplo 2: Guardar un entity con id autoincrementable
Se restringe por un campo secundario llamado descripción
No definimos método save en el controller.
El atributo idcolor es un autoincrementable que lo cargamos desde el beforeSave()
indicamos el parametro searchbyfieldsecond
<jmoordbjsf:toolbarsave
rendered="#{colorController.writable and applicationMenu.color.create}"
controller="#{colorController}"
entity="#{colorController.color}"
repository="#{colorController.colorRepository}"
searchbyfieldsecond="true"
/>
/>
ColorController.java
Definir el mètodo beforeSave()
@Aspect
@Override
public Boolean beforeSave() {
try {
Integer identity = autoincrementableStoreejbServices.getContador("color");
color.setIdcolor(identity);
return true;
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
}
return false;
}
Last updated
Was this helpful?