Simplest <s:fileUpload> usage
yuwono Apr 19, 2007 5:56 AMI've been hanging around for almost two weeks just to make <s:fileUpload> working.
Simply want to add upload file capability to seam-registration. I'm using seam-space
sample as reference and adapt it into stateless version. Not refering to wiki's
samples cause it using tomahawk, I just want to have it plain and simple.
Environment used :
- JBoss AS 4.0.5.GA
- JBoss Seam 1.2.0.Patch1
- JBoss IDE for Eclipse
- default JBoss Seam (upload) jars - no tomahawk.jar, no icefaces, no commons-upload.
- jboss-seam-ui.jar included
components.xml :
<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:web="http://jboss.com/products/seam/web" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-1.2.xsd http://jboss.com/products/seam/web http://jboss.com/products/seam/web-1.2.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-1.2.xsd"> <core:init jndi-pattern="@jndiPattern@"/> <core:ejb installed="@embeddedEjb@"/> <web:multipart-filter create-temp-files="true" max-request-size="1000000" url-pattern="*.seam"/> </components>
web.xml :
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- Seam --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.web.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- MyFaces --> <listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> </listener> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.jspx</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Faces Servlet Mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.seam</url-pattern> </servlet-mapping> </web-app>
application.xml :
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5"> <display-name>Myapp</display-name> <module> <web> <web-uri>seam-myapp.war</web-uri> <context-root>/myapp</context-root> </web> </module> <module> <ejb>seam-myapp.jar</ejb> </module> <module> <java>jboss-seam.jar</java> </module> <module> <java>el-api.jar</java> </module> <module> <java>el-ri.jar</java> </module> </application>
jboss-app.xml :
<jboss-app> <loader-repository> seam.jboss.org:loader=myapp </loader-repository> </jboss-app>
the view .................
index.jspx :
<?xml version="1.0"?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://jboss.com/products/seam/taglib" xmlns="http://www.w3.org/1999/xhtml" version="2.0"> <jsp:output doctype-root-element="html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <jsp:directive.page contentType="text/html"/> <html> <body> <f:view> <h:form enctype="multipart/form-data"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td>Upload Tasks</td> </tr> <tr> <td width="100%"><br/>File to upload: <s:fileUpload data="#{admin.uploadedFile}"/> </td> </tr> <tr> <td> <h:commandButton value="Submit" action="#{admin.parse}"/> </td> </tr> </table> </h:form> </f:view> </body> </html> </jsp:root>
and the code ..................
Admin.java :
package myapp; import javax.ejb.Stateless; import org.jboss.seam.annotations.Name; @Stateless @Name("admin") public class Admin implements AdminI { private byte[] uploadedFile; public void setUploadedFile(byte[] uploadedFile) { this.uploadedFile = uploadedFile; } public byte[] getUploadedFile() { return uploadedFile; } public void parse() throws Exception { if(uploadedFile != null) System.out.println("size = " + uploadedFile.length); else System.out.println("uploadedFile is null"); } }
AdminI.java :
package myapp; import javax.ejb.Local; @Local public interface AdminI { public void parse() throws Exception; public byte[] getUploadedFile(); public void setUploadedFile(byte[] uploadedFile); }
No error, but it always print "uploadedFile is null". What requirements I might missed?
Any help will be appreciated.