s:fileUpload - null output
greyatt Apr 2, 2008 12:04 PMI have recently upgraded my jboss from 4.2.1 to 4.3 jeap and seam 2.0.0 to 2.0.1. Since the upgrade s:uploadFile no longer sends any data - inputStream is null.
components.xml:
<?xml version="1.0"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd http://jboss.com/products/seam/jms http://jboss.com/products/seam/jms-2.0.xsd http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.0.xsd http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd">
<component name="org.jboss.seam.core.init">
<property name="debug">@debug@</property>
<property name="jndi-pattern">@jndiPattern@</property>
</component>
<core:manager concurrent-request-timeout="1500"
conversation-id-parameter="c" conversation-timeout="120000" parent-conversation-id-parameter="p"/>
<component auto-create="true" name="configurationManager">
<property name="url">@propertiesLocation@</property>
</component>
<factory auto-create="true" name="configuration" value="#{configurationManager.configuration}"/>
<factory auto-create="true" name="configurationMap" value="#{configurationManager.configurationMap}"/>
<persistence:managed-persistence-context auto-create="true"
name="entityManager" persistence-unit-jndi-name="java:/EntityManagerFactories/iaas"/>
<transaction:ejb-transaction/>
<security:identity authenticate-method="#{authenticator.authenticate}"/>
<mail:mail-session session-jndi-name="java:/Mail"/>
<web:multipart-filter create-temp-files="true" max-request-size="1000000" url-pattern="/*"/>
</components>
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: web.xml 1291 2008-03-31 10:29:53Z nmoorcroft $ --> <web-app 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" version="2.5"> <!-- Seam --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org.jboss.seam.servlet.ResourceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/seam/resource/*</url-pattern> </servlet-mapping> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>Seam Servlet Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamServletFilter</filter-class> </filter> <!-- JSF --> <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</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> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <!-- Facelets --> <context-param> <param-name>facelets.SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>facelets.REFRESH_PERIOD</param-name> <param-value>2</param-value> </context-param> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>facelets.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <!-- etc --> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>/index.html</welcome-file> </welcome-file-list> </web-app>
s:fileUpload usage:
...
<h:form id="uploadUsersForm" *enctype="multipart/form-data"*>
<h:panelGrid columns="2" cellpadding="0" cellspacing="0" styleClass="form-table details" columnClasses="labels, fields">
<h:outputText value="#{messages.uploadassessmentcodes_labelupload}" styleClass="text key" />
<s:fileUpload id="data"
data="#{uploadUser.inputStream}"
styleClass="btn-file" />
<s:span styleClass="clear"></s:span>
<s:div styleClass="clear rt mgn-rt0">
<h:commandButton action="#{uploadUser.save}" value="#{messages.uploadusers_btnupload}" styleClass="btn" />
<h:commandButton action="back" value="#{messages.uploadusers_btnback}" styleClass="btn" immediate="true"/>
</s:div>
</h:panelGrid>
</h:form>
...bean:
@Stateful
@Name("uploadUser")
public class UploadUserBean implements UploadUser {
@Logger Log log;
@In EntityManager entityManager;
@In private Map<String, String> messages;
@In Configuration configuration;
private InputStream inputStream;
public void save() {
boolean errors = false;
if(inputStream == null) {
FacesMessages.instance().addToControlFromResourceBundle("data", "selectFile");
return;
}
InputStreamReader reader = new InputStreamReader(inputStream);
... //more code
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
@Remove @Destroy
public void remove() {}
}Any help will be greatly appreciated.