JSF 2.2 File Upload Issue with PF

UI Components for JSF
Post Reply
csyperski
Posts: 103
Joined: 16 Apr 2010, 14:36

20 Mar 2014, 16:30

I have been wanting to move from JSF 2.1 to 2.2 but I keep encountering a bug where (with JSF 2.2) when I have an upload component in the same form as other content and I try to submit the form without any file to be uploaded I get the following error. The same exact webapp works with 2.1, but when I replace it with 2.2 the Exception is thrown. Please see my signature for exact versions being used.

Code: Select all

WARNING: javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
javax.faces.FacesException: javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
	at org.primefaces.component.fileupload.NativeFileUploadDecoder.decode(NativeFileUploadDecoder.java:44)
	at org.primefaces.component.fileupload.FileUploadRenderer.decode(FileUploadRenderer.java:44)
	at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831)
	at javax.faces.component.UIInput.decode(UIInput.java:771)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1225)
	at javax.faces.component.UIInput.processDecodes(UIInput.java:676)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at org.primefaces.util.ComponentUtils.processDecodesOfFacetsAndChilds(ComponentUtils.java:414)
	at org.primefaces.component.accordionpanel.AccordionPanel.processDecodes(AccordionPanel.java:291)
	at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at org.primefaces.component.layout.Layout.processDecodes(Layout.java:226)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:929)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:95)
	at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at net.dupage88.nucleus.filters.CacheFilter.doFilter(CacheFilter.java:41)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:152)
	at net.dupage88.nucleus.filters.NucleusOpenSessionInViewFilter.doFilterInternal(NucleusOpenSessionInViewFilter.java:24)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)
Caused by: javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
	at org.apache.catalina.connector.Request.parseParts(Request.java:2791)
	at org.apache.catalina.connector.Request.getParts(Request.java:2645)
	at org.apache.catalina.connector.Request.getPart(Request.java:2815)
	at org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:1081)
	at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:351)
	at org.primefaces.component.fileupload.NativeFileUploadDecoder.decodeAdvanced(NativeFileUploadDecoder.java:60)
	at org.primefaces.component.fileupload.NativeFileUploadDecoder.decode(NativeFileUploadDecoder.java:37)
	... 79 more
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
	at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:804)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:259)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:283)
	at org.apache.catalina.connector.Request.parseParts(Request.java:2727)
	... 85 more

Mar 20, 2014 9:20:52 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
SEVERE: javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
	at org.apache.catalina.connector.Request.parseParts(Request.java:2791)
	at org.apache.catalina.connector.Request.getParts(Request.java:2645)
	at org.apache.catalina.connector.Request.getPart(Request.java:2815)
	at org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:1081)
	at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:351)
	at org.primefaces.component.fileupload.NativeFileUploadDecoder.decodeAdvanced(NativeFileUploadDecoder.java:60)
	at org.primefaces.component.fileupload.NativeFileUploadDecoder.decode(NativeFileUploadDecoder.java:37)
	at org.primefaces.component.fileupload.FileUploadRenderer.decode(FileUploadRenderer.java:44)
	at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:831)
	at javax.faces.component.UIInput.decode(UIInput.java:771)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1225)
	at javax.faces.component.UIInput.processDecodes(UIInput.java:676)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at org.primefaces.util.ComponentUtils.processDecodesOfFacetsAndChilds(ComponentUtils.java:414)
	at org.primefaces.component.accordionpanel.AccordionPanel.processDecodes(AccordionPanel.java:291)
	at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at org.primefaces.component.layout.Layout.processDecodes(Layout.java:226)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1220)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:929)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java:95)
	at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at net.dupage88.nucleus.filters.CacheFilter.doFilter(CacheFilter.java:41)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:152)
	at net.dupage88.nucleus.filters.NucleusOpenSessionInViewFilter.doFilterInternal(NucleusOpenSessionInViewFilter.java:24)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8
	at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:804)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:259)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:283)
	at org.apache.catalina.connector.Request.parseParts(Request.java:2727)
	... 85 more

Here is the form from the xhtml where the exception is thrown....

Code: Select all

<h:form styleClass="track-changes message-view" enctype="multipart/form-data" id="crud-form">
                        <div class="button-panel-margin-bottom">
                            <p:commandButton icon="ui-icon-circle-plus" action="#{userMessageCreationBean.add}" value="#{text['protected.message.create.send']}" />
                        </div>
                        <h:panelGrid style="width: 50%;" styleClass="two-column-table-left muted inline-block meta-information left-margin-one-unit" columns="2">
                            <h:outputText value="#{text['protected.message.view.from']}" />
                            <h:outputText value="#{userMessageCreationBean.workingItem.creator}" />
                            
                            <h:outputText value="#{text['protected.message.view.to']}" />
                            <p:outputPanel styleClass="member-list" id="user-list">
                                <h:dataTable styleClass="nucleus-table-hover" rendered="#{! empty userMessageCreationBean.workingItem.membersAsList}" value="#{userMessageCreationBean.workingItem.membersAsList}" var="m">
                                    <h:column>
                                        <d:personImage person="#{generalPersonSearchBean.getPersonById(m.userId)}" width="25" />
                                    </h:column>
                                    <h:column>
                                        #{m.username}
                                    </h:column>
                                </h:dataTable>
                            </p:outputPanel>
                            
                            <h:outputText value="" />
                            <p:commandButton oncomplete="addressBook.show();" styleClass="block" immediate="true" value="#{text['protected.message.create.addremovemembers']}" icon="ui-icon-person" />
                            
                            <p:outputLabel for="title" value="#{text['protected.message.view.title']}" />
                            <p:inputText id="title" required="true" styleClass="input-xlarge" value="#{userMessageCreationBean.workingItem.title}" />
                        </h:panelGrid>
                        
                        <h:inputTextarea value="#{userMessageCreationBean.workingItem.message}" styleClass="message-text-area" />
                        
                        <p:accordionPanel id="tabs" multiple="true" > 
                            <p:tab  rendered="#{! empty userMessageCreationBean.workingItem.previousMessage}" title="#{text['protected.message.create.previous.title']}">  
                                <div class="message-body-previous">
                                    <h:outputText value="#{userMessageCreationBean.workingItem.previousMessage}" />
                                </div>
                            </p:tab>
                            <p:tab title="#{text['protected.message.create.attachments.add.title']}">  
                                <d:uploader rendered="#{userMessageCreationBean.currentAttachmentCount le 5}" maxSize="10485760" afterUpdate=":wrapper:crud-form:tabs:upload-list" fileUploadListener="#{fileUploadOracleMessageBean.handleFileUpload}" />    
                                <p:commandLink immediate="true" oncomplete="lockerDialog.show();">
                                    <h:outputText value="#{text['protected.fromlocker']}" />
                                </p:commandLink>
                                <p:outputPanel id="upload-list">
                                    <p:dataTable style="max-width: 50%;" rendered="#{! empty userMessageCreationBean.workingItem.allFilesAsList}" styleClass="top-margin-one-unit" var="f" value="#{userMessageCreationBean.workingItem.allFilesAsList}">
                                        <f:facet name="header">
                                            <h:outputText value="#{text['protected.message.create.attachments.current']}" />
                                        </f:facet>
                                        <p:column>
                                            <p:commandLink immediate="true" action="#{userMessageCreationBean.removeAttachment(f)}" update=":wrapper:crud-form:tabs:upload-list" styleClass="no-underline">
                                                <d:trashIcon />
                                            </p:commandLink>
                                        </p:column>
                                        <p:column>
                                            #{f.name}
                                        </p:column>
                                    </p:dataTable>
                                </p:outputPanel>
                            </p:tab>
                        </p:accordionPanel>
                        
                        <div class="button-panel">
                            <p:commandButton icon="ui-icon-circle-plus" action="#{userMessageCreationBean.add}" value="#{text['protected.message.create.send']}" />
                        </div>
                    </h:form>
Any idea what I am doing wrong?

smithh032772
Posts: 6144
Joined: 10 Sep 2011, 21:10

24 Mar 2014, 05:44

it's never good/recommended to have one form to do 'fileUpload' and to submit/post other components. Add a separate h:form (without enctype="multipart/form-data") for submit/post of the other components.

Code: Select all

<h:form styleClass="track-changes message-view" enctype="multipart/form-data" id="crud-form">
<d:uploader ... /> ???

Code: Select all

 <d:uploader rendered="#{userMessageCreationBean.currentAttachmentCount le 5}" maxSize="10485760" afterUpdate=":wrapper:crud-form:tabs:upload-list" fileUploadListener="#{fileUploadOracleMessageBean.handleFileUpload}" />
this is discussed so much on stackoverflow.com and in this forum; search this forum (upper right) and stackoverflow.com (via google.com).
Howard

PrimeFaces 6.0, Extensions 6.0.0, Push (Atmosphere 2.4.0)
TomEE+ 1.7.4 (Tomcat 7.0.68), MyFaces Core 2.2.9, JDK8
JUEL 2.2.7 | OmniFaces | EclipseLink-JPA/Derby | Chrome

Java EE 6 Tutorial|NetBeans|Google|Stackoverflow|PrimeFaces|Apache

csyperski
Posts: 103
Joined: 16 Apr 2010, 14:36

09 Apr 2014, 23:13

Please correct me if I am wrong, but being forced to break fileUpload components into their own forms limits the way in which you can layout your UI correct? IE: you can't have any p:uploads within/nested with other text input? Here is an example, there is a lot of composite/custom components, so let me know if you would like to see the source for those:

Code: Select all

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui" 
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:fn="http://java.sun.com/jsp/jstl/functions"
      xmlns:d="http://java.sun.com/jsf/composite/components" >

    <f:metadata>
        <f:viewParam name="courseId" id="courseIdViewParam" required="#{!facesContext.postback}" value="#{teacherNavigationBean.courseId}" />
        <f:viewParam name="pageId" id="pageIdViewParam" required="#{false}" value="#{teacherNavigationBean.pageId}" />
        <f:viewParam name="widgetId" id="widgetIdViewParam" required="false" value="#{teacherNavigationBean.widgetId}" />
        <f:event type="preRenderView" listener="#{htmlWidgetBean.init}"/>
    </f:metadata>

    <ui:composition template="/WEB-INF/view/templates/main-template.xhtml">
        <ui:define name="west">
            <ui:include src="/WEB-INF/view/includes/menus/teachercourses.xhtml" />
        </ui:define>
        <ui:define name="body">
            <d:contentWrapper rendered="#{! empty htmlWidgetBean.workingItem}" id="wrapper" titleMuted="#{htmlWidgetBean.course.name}" title="#{htmlWidgetBean.workingItem.title}" icon="fa-pencil-square">
                <div class="text-wrapper">
                    <h:form id="crud-form">
                        <d:buttonPanelWidget widgetBean="#{htmlWidgetBean}" />

                        <d:widgetSettings showReadOnlyOption="false" widget="#{htmlWidgetBean.workingItem}" />

                        <d:editor value="#{htmlWidgetBean.workingItem.body}" />

                        <d:widgetFiles 
                            id="widget-files"
                            widgetBean="#{htmlWidgetBean}" 
                            oracleBean="#{oracleWidgetHtmlBean}">
                            <p:column headerText="#{text['teacher.widget.attachments.insert']}">
                                <p:menuButton style="width: 450px;" value="#{text['teacher.widget.attachments.edactions']}" model="#{editorActions.getMenuModel(f)}" />
                            </p:column>
                        </d:widgetFiles>
                        <p:accordionPanel id="filetabs" styleClass="bottom-margin-one-unit" activeIndex="" dynamic="true">
                            <p:tab id="filetab" title="Pages">
                                <p:dataTable 
                                    rendered="#{! empty htmlWidgetBean.allPages}" 
                                    styleClass="top-margin-one-unit full-width nucleus-data-table" 
                                    tableStyleClass="default-datatable"
                                    var="p" 
                                    value="#{htmlWidgetBean.allPages}">
                                    <p:column headerText="#{text['teacher.widget.pages.visible']}">
                                        <d:enabledDisabledIcon value="#{p.currentlyVisible}" />
                                    </p:column>
                                    <p:column headerText="#{text['teacher.widget.pages.insert']}">
                                        <p:commandButton 
                                            icon="ui-icon-plusthick" 
                                            value="#{text['teacher.widget.pages.insert']}" 
                                            onclick="NUCLEUS.insertIntoEditorFile('#{linkBean.getPagePathRelative(p)}', '#{fileHelperBean.cleanForJs(p.title)}', false);" 
                                            type="button"  />
                                    </p:column>
                                    <p:column headerText="#{text['teacher.widget.pages.title']}">
                                        #{p.title}
                                    </p:column>

                                </p:dataTable>
                            </p:tab>
                        </p:accordionPanel>
                        <d:buttonPanelWidget widgetBean="#{htmlWidgetBean}" />
                    </h:form>
                </div>
            </d:contentWrapper>
        </ui:define>
        <ui:define name="dialogs">
            <d:deleteWidgetAttachment crudBean="#{htmlWidgetBean}" />
            <h:form>
                <d:fileLockerDialog maxSize="1048576000" elementToUpdate=":wrapper:crud-form:widget-files:filetabs:upload-list" fileTarget="#{htmlWidgetBean}" />
            </h:form>
        </ui:define>
    </ui:composition>
</html>
This code renders a page like the one below...

Image

My issue is that because forms can not be nested you couldn't do something like this, where you have a single "Save" or in this case an "Update" button that would save everything on above and below your upload widget then correct? So, if I split this up, then I could allow the user to click update and have it save the bottom "settings" section as well as the top rich text editor because I would need three forms in this case, right? Am I misunderstanding the issue or does the requirement for upload components to be on their own forms pretty limiting in this case? I guest what I am asking is why does this work perfectly in JSF 2.1, but breaks in JSF 2.2?

DougMH
Posts: 30
Joined: 11 Nov 2012, 04:03

21 May 2014, 00:46

I'm with csyperski on this one and it sounds to me like a PrimeFaces or Mojarra bug. I can navigate freely between several "content" forms pulled into my layout, but the minute I try to navigate away from the one form that has <p:fileUpload> in it, I get the error message

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded; charset=UTF-8

and the <p:fileUpload> "content" is redisplayed. I have a commandButton on the form to return to my home page. That's the only way I can navigate away from the form.

I have made all my layout that have forms method="POST" and enctype="multipart/form-data" When I view the source, the form is method="POST" and enctype="multipart/form-data but still I cannot navigate away from the page.

<html xmlns="http://www.w3.org/1999/xhtml"><head><link type="text/css" rel="stylesheet" href="/QuanticoRSO/faces/javax.faces.resource/theme.css?ln=primefaces-humanity" /><link type="text/css" rel="stylesheet" href="/QuanticoRSO/faces/javax.faces.resource/common-style.css?ln=css" /><link type="text/css" rel="stylesheet" href="/QuanticoRSO/faces/javax.faces.resource/primefaces.css?ln=primefaces&v=4.0.9" /><script type="text/javascript" src="/QuanticoRSO/faces/javax.faces.resource/jquery/jquery.js?ln=primefaces&v=4.0.9"></script><script type="text/javascript" src="/QuanticoRSO/faces/javax.faces.resource/jquery/jquery-plugins.js?ln=primefaces&v=4.0.9"></script><script type="text/javascript" src="/QuanticoRSO/faces/javax.faces.resource/primefaces.js?ln=primefaces&v=4.0.9"></script><script type="text/javascript" src="/QuanticoRSO/faces/javax.faces.resource/rsoScripts.js?ln=js"></script></head><body>
<form id="rsoFormId" name="rsoFormId" method="post" action="/QuanticoRSO/faces/qscRsoHome.xhtml" enctype="multipart/form-data">
<input type="hidden" name="rsoFormId" value="rsoFormId" />
<div id="rsoFormId:messages" class="ui-messages ui-widget" aria-live="polite"></div>

I'm using Mojarra 2.2.6 now and I'll update my signature to reflect that. The other information in the signature is correct.
Windows 8.1
JSF 2.2 (Mojarra 2.2.6)
primefaces-4.0.9.jar
sunny-1.0.10.jar

senthinil
Posts: 54
Joined: 10 Jul 2013, 14:53

26 Aug 2014, 11:25

Hi There

I too face the same problem, with PF 4.0 + jsf 2.1, the file upload was working perfectly as required, but the mojarra 2.2.x has the bug. The mojarra is culprit not PF 4.0. I think you guys problem could be solved in this link (BaluC comments) http://stackoverflow.com/questions/1926 ... -jsf-2-2-x

Regards
Sentil

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 49 guests