{"id":533,"date":"2010-12-03T12:50:44","date_gmt":"2010-12-03T17:50:44","guid":{"rendered":"http:\/\/alejandroayala.solmedia.ec\/?p=533"},"modified":"2012-04-20T23:54:15","modified_gmt":"2012-04-21T04:54:15","slug":"icefaces-2-beta-2-fileentry","status":"publish","type":"post","link":"https:\/\/alejandroayala.solmedia.ec\/?p=533","title":{"rendered":"Icefaces 2 Beta 2. FileEntry [ACTUALIZADA]"},"content":{"rendered":"<p style=\"text-align: justify;\">En la beta 1 de Icefaces 2, existe un <a href=\"http:\/\/wiki.icefaces.org\/display\/ICE\/ICEfaces+2.0.0+Beta+1+Release+Notes\" target=\"_blank\">Issue<\/a> en el componente FileInput, lo que impide su uso habitual. Al actualizar a la Beta 2 me llev\u00e9 la sorpresa de que el componente FileInput hab\u00eda desaparecido &lt;ice:inputFile&gt;. Las <a href=\"http:\/\/wiki.icefaces.org\/display\/ICE\/ICEfaces+2.0.0+Beta+2+Release+Notes\" target=\"_blank\">notas de lanzamiento<\/a> de la Beta 2 indican que este componente ha sido reemplazado por FileEntry que es parte de los nuevos componentes que est\u00e1 siendo desarrollada llamada <a href=\"http:\/\/wiki.icefaces.org\/display\/ICE\/ICEfaces+Advanced+Components\" target=\"_blank\">\u00abAdvanced Components Showcase\u00bb<\/a>.<\/p>\n<p style=\"text-align: justify;\">A continuaci\u00f3n explico como habilitar este componente para su uso.<\/p>\n<p style=\"text-align: justify;\">Lo que necesitar\u00e1s para seguir este documento es lo siguiente:<\/p>\n<ul style=\"text-align: justify;\">\n<li>Netbeans 6.9.1<\/li>\n<li>Icefaces 2 Beta 2<\/li>\n<li>JSF 2<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">Para empezar declararemos el tag para acceder a los componentes <span style=\"color: #003300;\"><strong>ace<\/strong><\/span>(<a href=\"http:\/\/wiki.icefaces.org\/display\/ICE\/ICEfaces+Advanced+Components\" target=\"_blank\">Advanced Components Showcase<\/a>) en nuestro archivo xhtml<\/p>\n<p>[sourcecode language=\u00bbxml\u00bb]<br \/>\nxmlns:ace=&quot;http:\/\/www.icefaces.org\/icefaces\/components&quot;<br \/>\n[\/sourcecode]<\/p>\n<p>Con el tag ace declarado podemos acceder a los nuevos componentes, entre los cuales se encuentra el FileEntry<\/p>\n<p>[sourcecode language=\u00bbxml\u00bb]<br \/>\n&lt;ice:form&gt;<br \/>\n        &lt;ace:fileEntry useOriginalFilename=&quot;true&quot;<br \/>\n                       relativePath=&quot;files\/&quot;<br \/>\n                       fileEntryListener=&quot;#{user.listener}&quot;&gt;<br \/>\n            &lt;h:commandButton value=&quot;Cargar&quot; \/&gt;<\/p>\n<p>        &lt;\/ace:fileEntry&gt;<br \/>\n &lt;\/ice:form&gt;<br \/>\n[\/sourcecode]<\/p>\n<p>Declaramos el form(&lt;ice:form&gt;) y el componente que reemplaza el inputFile\u00a0 <strong>&lt;<span style=\"color: #003300;\">ace:fileEntry<\/span>&gt;.<\/strong><\/p>\n<ul>\n<li><strong><span style=\"color: #003300;\">useOriginalFilename=\u00bbtrue\u00bb<\/span> <\/strong>usa el nombre original del archivo cuando lo guarda en el servidor.<\/li>\n<li><strong><span style=\"color: #003300;\">relativePath=\u00bbfiles\/\u00bb<\/span> <\/strong>aqu\u00ed definimos una carpeta donde se guardar\u00e1 los archivos subidos, esta carpeta debe existir en el root del proyecto.<\/li>\n<li><span style=\"color: #003300;\"><strong>fileEntryListener=\u00bb#{user.listener}\u00bb<\/strong><\/span> definimos el bean me maneja el evento cuando damos clic en el bot\u00f3n para proceder a la carga.<\/li>\n<li><span style=\"color: #003300;\"><strong>h:commandButton value=\u00bbCargar\u00bb<\/strong><\/span> actualmente es el \u00fanico elemento que soporta la acci\u00f3n para subir los archivos, los desarrolladores manifiestan que en la versi\u00f3n final se podr\u00e1 usar los componentes de bot\u00f3n de icefaces.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n la clase del bean que controla la cargada del archivo:<\/p>\n<p>[sourcecode language=\u00bbjava\u00bb]<br \/>\nimport javax.faces.bean.ManagedBean;<br \/>\nimport javax.faces.bean.RequestScoped;<br \/>\nimport org.icefaces.component.fileentry.FileEntry;<br \/>\nimport org.icefaces.component.fileentry.FileEntryEvent;<br \/>\nimport org.icefaces.component.fileentry.FileEntryResults;<\/p>\n<p>\/**<br \/>\n *<br \/>\n * @author alejo<br \/>\n *\/<br \/>\n@ManagedBean<br \/>\n@RequestScoped<br \/>\npublic class User {<\/p>\n<p>    \/** Creates a new instance of User *\/<br \/>\n    public User() {<br \/>\n    }<\/p>\n<p>    public void listener(FileEntryEvent event) {<br \/>\n        FileEntry fileEntry = (FileEntry) event.getSource();<br \/>\n        FileEntryResults results = fileEntry.getResults();<br \/>\n        for (FileEntryResults.FileInfo fileInfo :<br \/>\n            results.getFiles()) {<br \/>\n            if (fileInfo.isSaved()) {<br \/>\n                \/\/ Procesando el archivo<br \/>\n            }<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n[\/sourcecode]<\/p>\n<p>Podemos apreciar las anotaciones que indican que es un bean de \u00e1mbito de Petici\u00f3n, las nuevas caracter\u00edsticas de JSF 2. Y la forma de procesar el archivo cambia dr\u00e1sticamente a como se hacia con Icefaces 1.8. Podemos ver instancias a <span style=\"color: #003300;\"><strong>FileEntry<\/strong><\/span> y <span style=\"color: #003300;\"><strong>FileEntryResults<\/strong><\/span>.<\/p>\n<p>Las expectativas son buenas con los nuevos componentes, gran expectativa han generado, esperemos entonces la liberaci\u00f3n final.<\/p>\n<p>Espero haya sido de su ayuda.<\/p>\n<h2><strong>ACTUALIZACI\u00d3N: 1\/04\/2011<\/strong><\/h2>\n<p>La versi\u00f3n final de Icefaces2 esta lista, y esta actualizaci\u00f3n consta de ciertos cambios en los archivos de la vista y el controlador que se expusieron al inicio de este post, probado en producci\u00f3n se puede decir que esto es lo que se tiene que hacer para que el componente FileEntry funcione correctamete:<\/p>\n<p>Primeramente la vista:<\/p>\n<p>[sourcecode language=\u00bbxml\u00bb]<br \/>\n&lt;ace:fileEntry id=&quot;fileEntryBuzon&quot;<br \/>\n           useOriginalFilename=&quot;true&quot;<br \/>\n           useSessionSubdir=&quot;true&quot;<br \/>\n           absolutePath=&quot;\/Documentos\/files&quot;<br \/>\n           fileEntryListener=&quot;#{controlador.listener}&quot; &gt;<\/p>\n<p>           &lt;h:commandButton value=&quot;Cargar Imagen&quot;<br \/>\n                 styleClass=&quot;boton-cargar-imagen&quot; \/&gt;<br \/>\n&lt;\/ace:fileEntry&gt;<br \/>\n[\/sourcecode]<\/p>\n<p>Ahora el controlador:<\/p>\n<p>[sourcecode language=\u00bbjava\u00bb]<br \/>\npublic void listener(FileEntryEvent event) {<br \/>\n       FileEntry fileEntry = (FileEntry) event.getSource();<br \/>\n       FileEntryResults results = fileEntry.getResults();<br \/>\n       for (FileEntryResults.FileInfo fileInfo : results.getFiles()) {<br \/>\n            if (fileInfo.isSaved()) {<br \/>\n                  path = fileInfo.getFile().getPath();<br \/>\n            }<br \/>\n            \/\/aqui podemos guardar el path<br \/>\n             miDao.setImagenPath(path);<br \/>\n      }<br \/>\n}<br \/>\n[\/sourcecode]<\/p>\n<p>Y para finalizar si al estar en producci\u00f3n les da algunos errores cuando el archivo es almacenado prueben agregando esto en el archivo web.xml:<\/p>\n<p>[sourcecode language=\u00bbxml\u00bb]<br \/>\n&lt;context-param&gt;<br \/>\n     &lt;param-name&gt;javax.faces.PARTIAL_STATE_SAVING&lt;\/param-name&gt;<br \/>\n     &lt;param-value&gt;false&lt;\/param-value&gt;<br \/>\n&lt;\/context-param&gt;<br \/>\n[\/sourcecode]<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=a1ejo_ayala\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>En la beta 1 de Icefaces 2, existe un Issue en el componente FileInput, lo que impide su uso habitual. Al actualizar a la Beta 2 me llev\u00e9 la sorpresa de que el componente FileInput hab\u00eda desaparecido &lt;ice:inputFile&gt;. Las notas de lanzamiento de la Beta 2 indican que este componente ha sido reemplazado por FileEntry\u2026 <span class=\"read-more\"><a href=\"https:\/\/alejandroayala.solmedia.ec\/?p=533\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":620,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false},"categories":[4],"tags":[115,113,114,506,116,111,112,110,62,507],"_links":{"self":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/533"}],"collection":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=533"}],"version-history":[{"count":16,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/533\/revisions"}],"predecessor-version":[{"id":537,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/533\/revisions\/537"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/media\/620"}],"wp:attachment":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}