Hello,
I am making a forum where people can upload files to be shared. I can't make file
upload work whereas I am in a very classical environment :
seam 1.2.1 CP1
jboss eap 4.2.0
filename and bytearray are seen as null in the SFSB
I have seen some people having quite the same problem but none of the case corresponds to
my problem.
it might be silly but ....i am stuck
here is the web page :
| <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
| <ui:composition
xmlns="http://www.w3.org/1999/xhtml"
|
xmlns:s="http://jboss.com/products/seam/taglib"
|
xmlns:ui="http://java.sun.com/jsf/facelets"
|
xmlns:f="http://java.sun.com/jsf"
|
xmlns:c="http://java.sun.com/jsf/core"
|
xmlns:h="http://java.sun.com/jsf/html"
|
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
|
xmlns:a="https://ajax4jsf.dev.java.net/ajax"
| template="layout/template.xhtml">
|
| <ui:define name="body">
|
| <h:form rendered="#{forum.id != 0}">
| <h:commandButton value="Previous element"
| action="#{forumManager.previousElement}" />
| <h:commandButton value="Next element"
| action="#{forumManager.nextElement}"/>
| </h:form>
|
| <h:form id="createService" styleClass="edit">
|
| <rich:panel>
| <c:facet name="header">Forum #{forum.id}</c:facet>
|
| <s:validateAll>
|
| <div class="input">
| <s:decorate template="layout/edit.xhtml">
| <ui:define name="label">Product name
:</ui:define>
| <h:inputText id="login" size="50"
value="#{forum.product.name}" required="true"
rendered="#{user.context == 1}"/>
| <h:outputText id="loginOut" size="50"
value="#{forum.product.name}" rendered="#{user.context == 0}"/>
| </s:decorate>
| </div>
|
| <div class="input">
| <s:decorate template="layout/edit.xhtml">
| <ui:define name="label">Deal Id :</ui:define>
| <h:inputText size="50" value="#{forum.deal.id}"
required="true" rendered="#{user.context == 1}"/>
| <h:outputText size="50" value="#{forum.deal.id}"
rendered="#{user.context == 0}"/>
| </s:decorate>
| </div>
|
|
| </s:validateAll>
|
| <div style="clear:both"/>
|
| </rich:panel>
|
|
| <h:form enctype="multipart/form-data">
| <s:validateAll>
| <s:fileUpload data="#{forumManager.fileByteArray}"
fileName="#{fileName}" />
|
| <h:commandButton action="#{forumManager.registerFile}"
value="Upload file" styleClass="action"/>
| </s:validateAll>
| </h:form>
|
|
| <rich:tabPanel switchType="client">
| <rich:tab label="Discussion">
|
| <rich:panel>
| <c:facet name="header" >Previous messages</c:facet>
| <h:dataTable value="#{forum.messages}"
var="potentialEditedMessage" >
|
| <h:column>
| <c:facet name="header">date</c:facet>
| <h:outputText value="#{potentialEditedMessage.submitTime}"/>
| </h:column>
|
| <h:column>
| <c:facet name="header">content</c:facet>
| <h:outputText>
| <s:formattedText
value="#{potentialEditedMessage.content}"/>
| </h:outputText>
| </h:column>
|
| </h:dataTable>
|
|
| <div style="clear:both"/>
| </rich:panel>
|
| <a:outputPanel id="msgPreview">
|
| <rich:panel>
|
| <c:facet name="header" >Message preview</c:facet>
|
| <s:formattedText value="#{message.content}"/>
|
| <div style="clear:both"/>
|
| </rich:panel>
|
| </a:outputPanel>
|
|
|
| <a:outputPanel id="msgEditor">
|
| <h:form>
|
| <rich:panel>
| <c:facet name="header" ></c:facet>
|
| <h:inputTextarea id="text"
value="#{message.content}" cols="100" rows="20"/>
|
| <div style="clear:both"/>
| </rich:panel>
|
| <h:commandButton value="Preview message">
| <a:support event="onclick" disableDefault="true"
reRender="msgPreview" />
| </h:commandButton>
|
| <h:commandButton action="#{forumManager.registerMessage}"
value="Submit message" styleClass="action"/>
|
| </h:form>
|
| </a:outputPanel>
|
| </rich:tab>
|
|
| <rich:tab label="Files">
|
| </rich:tab>
|
| </rich:tabPanel>
|
|
| </h:form>
| </ui:define>
| </ui:composition>
|
|
here is the SFSB : interesting part in blue
| package fr.helmet.bbpp.manager;
|
| import fr.helmet.bbpp.entity.Forum;
| import fr.helmet.bbpp.entity.Message;
| import java.util.List;
|
| import javax.ejb.Remove;
| import javax.ejb.Stateful;
| import javax.persistence.EntityManager;
| import org.jboss.seam.annotations.Destroy;
| import org.jboss.seam.annotations.Name;
| import fr.helmet.bbpp.entity.User;
| import java.io.FileOutputStream;
| import java.util.LinkedList;
| import org.jboss.seam.annotations.Begin;
| import org.jboss.seam.annotations.End;
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.Out;
| import org.jboss.seam.core.FacesMessages;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.datamodel.DataModel;
| import org.jboss.seam.log.Log;
| import javax.persistence.Query;
|
| @Stateful
| @Name("forumManager")
| //(a)Scope(ScopeType.EVENT)
| public class ForumManagerBean implements ForumManager, java.io.Serializable {
|
| @Logger
| private Log logger ;
|
| @DataModel
| List<Forum> forums = new LinkedList<Forum>();
|
| @In(required=false)
| @Out(required=false)
| private Message message;
|
|
| private byte[] fileByteArray;
|
| @In(required=false)
| @Out(required=false)
| private String fileName;
|
|
| //@PersistenceContext
| //EntityManager em;
|
| @In EntityManager entityManager;
|
| @In(required=false)
| @Out(required=false)
| Forum forum ;
|
| @In(required=false)
| @Out(required=false)
| User user;
|
| @In FacesMessages facesMessages;
|
|
|
| @Remove @Destroy
| public void destroy() {
| // SystentityManager.out.println("Entree dans Destroy");
| }
|
|
| public void nextElement(){
|
| int i = user.getForums().indexOf(user.getForum());
| i++;
| if (i > user.getForums().size()-1) i=0;
|
| user.setForum(user.getForums().get(i));
| this.forum = entityManager.find(Forum.class,user.getForum().getId());
| }
|
| public void previousElement(){
|
| int i = user.getForums().indexOf(user.getForum());
| i--;
| if (i < 1) i = user.getForums().size()-1;
|
| user.setForum(user.getForums().get(i));
| this.forum = entityManager.find(Forum.class,user.getForum().getId());
| }
|
|
| public void registerFile() {
|
| logger.info("IN registerFile");
|
| System.out.println("name of file = " + this.fileName);
|
| //System.out.println("size of byte array = " +
this.fileByteArray.length);
|
|
| String filePath = "/home/vlaugier/Developpement/UPLOADED_FILES/" +
this.fileName;
| try {
| FileOutputStream file = new FileOutputStream(filePath) ;
| file.write(this.fileByteArray);
| } catch (Exception ex) {logger.fatal("could not save uploaded
file");}
|
| }
|
|
| public void registerMessage()
| {
| this.message.setForum(this.forum);
| entityManager.merge(this.message);
|
| String queryString = "select m from Message m WHERE m.forum=?";
| Query query = entityManager.createQuery(queryString);
| query.setParameter(1,forum);
| this.forum.setMessages(query.getResultList());
|
| }
|
|
| @End
| public void registerForum(Forum forum )
| {
| // SystentityManager.out.println("enregistrement du forum " + forum
);
| // SystentityManager.out.println("Parent du forum :" + forum
.getParentForum());
| entityManager.persist(forum );
|
| FacesMessages.instance().add("Nouveau Forum enregistré dans le
catalogue!") ;
| user.setContext(user.READING); // back to READING mode
| forum = null;
| }
|
|
| @End
| public String updateForum() {
| //System.out.println("mise ÃÂ jour");
| entityManager.merge(forum );
|
| user.setContext(user.READING); // back to READING mode
| FacesMessages.instance().add("Forum successfully updated !") ;
|
| return null;
| }
|
|
| @Begin(join=true)
| public String viewForum(Forum serv) {
|
| this.forum = serv;
|
| user.setContext(user.READING);
|
| //facesMessages.add("editAccount " +
this.client.getAccount().getFullname());
| //this.account = client.getAccount();
| return "createProduct";
| }
|
|
| @Begin(join=true)
| public void editForum(Forum serv){
|
| this.forum = serv;
|
| user.setContext(user.WRITING);
|
| }
|
|
| @Begin(join=true)
| public String startCreateForum() {
|
| user.setContext(user.WRITING);
|
| return "createProduct" ;
| }
|
| public List<Forum> getForums()
| {
| return forums;
| }
|
| public void setForums(List<Forum> forums)
| {
| this.forums=forums;
| }
|
|
| public Forum getForum() {
| return forum;
| }
|
|
| @Begin(join=true)
| public String defineFromUserForum() {
| try {
| this.forum = entityManager.find(Forum.class,user.getForum().getId());
| }catch (Exception ex) {facesMessages.add("You have no element selected for
this page yet");}
| return "createForum";
| }
|
| @Begin(join=true)
| public String defineFromUserForums() {
| //logger.info(user.getForums().size());
| this.forums = new LinkedList<Forum>();
| try {
| for (Forum frm : user.getForums()) {
| this.forums.add ( entityManager.find(Forum.class,frm.getId()) ) ;
| }
| this.forum = this.forums.get(0);
| } catch (Exception ex) {facesMessages.add("You have no element selected
for this page yet");}
| return "createForum";
| }
|
| public byte[] getFileByteArray() {
| return fileByteArray;
| }
|
| public void setFileByteArray(byte[] fileByteArray) {
| this.fileByteArray = fileByteArray;
| }
|
|
|
| }
|
here is the component.xml : (but I have not changed anything in it)
| <?xml version="1.0" encoding="UTF-8"?>
| <components
xmlns="http://jboss.com/products/seam/components"
|
xmlns:core="http://jboss.com/products/seam/core"
|
xmlns:drools="http://jboss.com/products/seam/drools"
|
xmlns:security="http://jboss.com/products/seam/security"
|
xmlns:mail="http://jboss.com/products/seam/mail"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:framework="http://jboss.com/products/seam/framework"
| xsi:schemaLocation=
| "http://jboss.com/products/seam/core
http://jboss.com/products/seam/core-1.2.xsd
|
http://jboss.com/products/seam/drools
http://jboss.com/products/seam/drools-1.2.xsd
|
http://jboss.com/products/seam/security
http://jboss.com/products/seam/security-1.2.xsd
|
http://jboss.com/products/seam/mail
http://jboss.com/products/seam/mail-1.2.xsd
|
http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-1.2.xsd">
|
| <core:init debug="@debug@"
jndi-pattern="@jndiPattern@"/>
|
| <core:manager concurrent-request-timeout="500"
| conversation-timeout="120000"
| conversation-id-parameter="cid"
| conversation-is-long-running-parameter="clr"/>
|
| <core:managed-persistence-context name="entityManager"
| auto-create="true"
|
persistence-unit-jndi-name="java:/bbppEntityManagerFactory"/>
|
| <core:ejb installed="@embeddedEjb@"/>
|
| <drools:rule-base name="securityRules">
| <drools:rule-files>
| <value>/security.drl</value>
| </drools:rule-files>
| </drools:rule-base>
|
| <security:identity
authenticate-method="#{authenticator.authenticate}"
| security-rules="#{securityRules}"/>
|
| <event type="org.jboss.seam.notLoggedIn">
| <action expression="#{redirect.captureCurrentView}"/>
| </event>
| <event type="org.jboss.seam.postAuthenticate">
| <action expression="#{redirect.returnToCapturedView}"/>
| </event>
|
|
| <mail:mail-session host="localhost" port="2525"
username="test" password="test" />
|
| <!-- For use with jBPM pageflow or process management -->
| <!--
| <core:jbpm>
| <core:process-definitions></core:process-definitions>
| <core:pageflow-definitions></core:pageflow-definitions>
| </core:jbpm>
| -->
| <framework:entity-query name="moralEntityQuery" ejbql="select m
from MoralEntity m" />
| <framework:entity-query name="companyQuery" ejbql="select c from
Company c" />
| <framework:entity-query name="agentQuery" ejbql="select a from
Agent a" />
| <framework:entity-query name="roleQuery" ejbql="select r from
Role r" />
| <framework:entity-query name="dealQuery" ejbql="select d from
Deal d" />
| <framework:entity-query name="productQuery" ejbql="select p from
Product p" />
|
| </components>
|
|
and the web.xml :
| <?xml version="1.0" ?>
| <web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
| version="2.4">
|
| <!-- Ajax4jsf (must come first!) -->
|
| <filter>
| <display-name>Ajax4jsf Filter</display-name>
| <filter-name>ajax4jsf</filter-name>
| <filter-class>org.ajax4jsf.Filter</filter-class>
| </filter>
|
| <filter-mapping>
| <filter-name>ajax4jsf</filter-name>
| <url-pattern>*.seam</url-pattern>
| </filter-mapping>
|
| <context-param>
| <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
|
<param-value>org.jboss.seam.ui.facelet.SeamFaceletViewHandler</param-value>
| </context-param>
|
| <context-param>
| <param-name>org.ajax4jsf.SKIN</param-name>
| <param-value>blueSky</param-value>
| </context-param>
|
| <!-- 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>
|
| <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>
|
| <!-- MyFaces -->
| <!--
| <listener>
|
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
| </listener>
| -->
|
| <!-- SUN Faces instead of MyFaces -->
| <listener>
|
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
| </listener>
|
| <!-- Facelets development mode (disable in production) -->
|
| <context-param>
| <param-name>facelets.DEVELOPMENT</param-name>
| <param-value>true</param-value>
| </context-param>
|
| <!-- JSF -->
|
| <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>.xhtml</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>*.seam</url-pattern>
| </servlet-mapping>
|
| <security-constraint>
| <display-name>Restrict raw XHTML Documents</display-name>
| <web-resource-collection>
| <web-resource-name>XHTML</web-resource-name>
| <url-pattern>*.xhtml</url-pattern>
| </web-resource-collection>
| <auth-constraint>
| <role-name>NONE</role-name>
| </auth-constraint>
| </security-constraint>
|
| </web-app>
|
|
I hae not changed anything in the application.xml
thanks for your help
Vincent
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4119886#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...