Skip to main content

jmoordbutils para descargar y visualizar archivos en cualquier directorio mediante Java Server Faces

jmoordbutils para descargar y visualizar archivos en cualquier directorio mediante Java Server Faces




 Generalmente necesitamos ver imĆ”genes desde un  directorio fuera del directorio /resource de nuestro proyecto Web con Java Server Faces.TambiĆ©n queremos ver y descargar archivos PDF. 

El procedimiento serĆ­a  crear un StreamedContent para su manejo. Dentro de la libreria jmnoordbutils desarrolle  la claseJMoordbMediaManager.java que simplifica el trabajo. Es importante considerar los @Scoped. Lo recomendable es que la clase que administre el StreamContent sea @RequestScoped. (Ya esta implementado en la biblioteca jmoordbutils).

De esta manera solo necesitas  indicar en el componente <p:graphicImage la ruta completa del archivo de imagen que deseas mostrar.

Solo necesitamos inyectar en el controller
 @Inject 
JMoordbMediaManager  jMoordbMediaManager;   

y crear el metodo

 public String saveToMediaContex(String pathOfFile) {

        try {

              JmoordbMediaContext.put("pathOfFile",pathOfFile);

        } catch (Exception e) {

            JsfUtil.errorDialog("saveToMediaContexn()", e.getLocalizedMessage());

        }


        return "";

    }



En la pagina.xhtml

Necesitamos invocar al mƩtodo saveToMediaContex() indicando el path del archivo para ser guardado en el Context.


  <p:column exportable="false">

   <p:commandButton icon="pi pi-pencil" update=":form:manage-persona-content"

                                            value="Show"

  oncomplete=" PF('managePersonaDialog').initPosition(); PF('managePersonaDialog').show()"

                             action="#{datatableController.saveToMediaContex(var.foto)}"

                                                 styleClass="edit-button rounded-button ui-button-success" process="@this">

                                    <f:setPropertyActionListener value="#{var}" target="#{datatableController.personaSelected}"/>

                                </p:commandButton>



La imagen la mostramos invocando value="#{jMoordbMediaManager.generate(var.foto)}"


  <p:graphicImage id="image" value="#{jMoordbMediaManager.generate(var.foto)}" 

                                                width="45" height="45"

                                      rendered="#{jMoordbMediaManager.isImage(var.foto)}"

                                                stream="false" cache="false" />





El dialogo lo invocamos desde el botón


<p:column exportable="false">

                                <p:commandButton icon="pi pi-pencil" update=":form:manage-persona-content"

                                                 value="Show"

                                                 oncomplete=" PF('managePersonaDialog').initPosition(); PF('managePersonaDialog').show()"

                                                 action="#{datatableController.saveToMediaContex(var.foto)}"

                                                 styleClass="edit-button rounded-button ui-button-success" process="@this">

                                    <f:setPropertyActionListener value="#{var}" target="#{datatableController.personaSelected}"/>

                                </p:commandButton>

                            </p:column>







Comments

Popular posts from this blog

JUnit con DataClassG

JUnit con DataClassG 0. ESQUEMA Services: Por cada beans crearemos una clase Services que se encargarĆ” de interactuar con el controller para realizar las operaciones de la base de datos. Se crearan los mĆ©todos insert, update,delete y los demas metodos para realizar las diversas operaciones. Test: Se crearĆ”n las clases para test de las clases Services. Form: Los formularios para la interactuar con el usuario. ProvinciasServices.java colocamos los mĆ©todos, insert, update,delete public class ProvinciasServices {    ProvinciasController provinciasController = new ProvinciasController();    public ProvinciasServices() {    }    public Boolean insert (Provincias provincias){        try{            if(provinciasController.insert(provincias)){              return tru...

Primefaces v13

 La versión nueva de primefaces v13.0 elimina el componente <p:repeat>  Consulte los cambios en  https://github.com/primefaces/primefaces/releases/tag/13.0.0 por lo tanto si necesita una solución similar considere utilizar  <p:carousel>  o  <ui:repeat> En la versión 13 genera una excepción