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?