FileUpload Primefaces, Jboss y Eclipse

Para poder iniciar se debe configurar JSF en eclipse, deben descargar una implementacion que puede ser Mojarra o MyFaces, una manera de descargar es en el proyecto web Properties->Project Faces -> Java Server Faces -> Download Library (El icono del lado derecho) y ahí escogen la implementacion, y posteriormente agregar el jar de jstl-1.2 a la carpeta WebContent/WEB-INF/lib.

Para usar primefaces basta con agregar el jar a la carpeta WEB-INF/lib , pero para usar el fileUpload si es necesario agregar los jars de commons-fileupload y commons-io los cuales deben revisar en la documentación de primefaces que versión corresponde según la versión de prime y configurar un par de lineas en el web.xml:

    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

En la vista (página xhtml) se debe colocar el siguiente código:

<f:view>
    <h:head>
        <meta http-equiv="Content-Type"
            content="text/html; charset=ISO-8859-1" />
        <title>File Upload Sample</title>
    </h:head>
    <body>
        <h:form id="myform" enctype="multipart/form-data">
            <h:outputStylesheet library="css" name="style.css" />
            <p:growl id="messages" showDetail="true" />
            <p:fileUpload
                fileUploadListener="#{fileuploadcontroller.uploadAttachment}"
                mode="advanced" update="messages" multiple="true"
                sizeLimit="900000000"
                allowTypes="/(\.|\/)(gif|jpe?g|png|txt)$/"
                uploadLabel="Cargar" cancelLabel="Cancelar" label="Buscar archivo"
                required="true" />
            <br />
            <br />
            <strong>Mensaje</strong> <br/><br />
            <p:inputText id="txtField" style="width:250px" maxlength="40">
                <f:validateRequired for="txtField"></f:validateRequired>
            </p:inputText>
        </h:form>
    </body>
</f:view>

En la configuración del fileUpload definimos el modo advanced para que aparezca con ese estilo de menubar, el tamaño máximo del archivo, que permita varios uploads a la vez , los tipos de archivo permitidos y por ultimo el método del controlador para gestionar la carga del archivo; también podemos notar que tenemos un inputText pero que no esta asociado en la propiedad value a ningun bean, esto sucede ya que al form lo hemos definido como enctype=”multipart/form-data” esto causa que lleguen los valores null al controlador, y la manera en que debemos obtener los parámetros es a través del objeto request que tiene el mapa de parámetros del formulario.


@ManagedBean(name="fileuploadcontroller")
@RequestScoped
public class FileUploadController {
 
    public void uploadAttachment(FileUploadEvent event){
        UploadedFile file = event.getFile();
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        String txtField = ec.getRequestParameterMap().get("myform:txtField");
        String filePath = ec.getRealPath(String.format("/resources/img/%s",file.getFileName()));
        try {
            FileOutputStream fos = new FileOutputStream(filePath);
            fos.write(file.getContents());
            fos.flush();
            fos.close();
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,String.format("Archivo cargado: %s ", file.getFileName()),
                String.format("Mensaje: %s", txtField)));
 
    }
 
}

El método uploadAttachment es el que esta asociado en el fileUpload en la propiedad fileUploadListener, dentro de este como vemos podemos obtener el parámetro del inputText a través de :myform:txtField, que corresponden al id del fomulario <form> y el inputText respectivamente, el resultado del ejemplo es cargar el archivo en la carpeta /resources/img y presentar un mensaje con el texto ingresado en el input, que obviamente puede ser utilizado con otros fines acorde al caso que se les presente.

uploadfilebuhoos

Descargar Proyecto

Fuente: gishak

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *