Greeting for everyone, I was trying to implement upload in my JSF2 project, but at the click of the save button it appeared that message below
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
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:2794)
at org.apache.catalina.connector.Request.getParts(Request.java:2641)
at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1083)
at com.sun.faces.renderkit.html_basic.FileRenderer.decode(FileRenderer.java:91)
... 34 more
The error message indicates that the form required the presence of enctype="multipart / form-data"
I did not understand why the form had already placed the doctype in the form tag as shown below;
<ui:composition template="/WEB-INF/template/LayoutSystem.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<!-- xmlns:h="http://java.sun.com/jsf/html" -->
<ui:define name="titulo">Novas Notícias</ui:define>
<ui:define name="corpo">
<h:form id="form" enctype="multipart/form-data">
<h1>Novas Notícias</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" />
<p:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroNoticiaBean.salvar}">
<f:ajax execute="@form" render="@all"/>
</p:commandButton>
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa"
outcome="/noticias/PesquisaNoticias.xhtml" />
</p:toolbarGroup>
</p:toolbar>
<div id="wrap">
<div class="left-sidebar">
<p:panelGrid columns="2" id="painel1"
style="width: 50%; margin-top: 20px" columnClasses="rotulo, campo">
<p:outputLabel value="Titulo" for="titulo" />
<p:inputText id="titulo" size="20" maxlength="50"
value="#{cadastroNoticiaBean.noticia.titulo_noticia}" />
<p:outputLabel value="Data" for="data_noticia" />
<p:calendar id="data_noticia" pattern="dd/MM/yyyy"
value="#{cadastroNoticiaBean.noticia.data_noticia}" />
<p:outputLabel value="Descrição" for="descricao" />
<p:inputText id="descricao" size="20" maxlength="250"
value="#{cadastroNoticiaBean.noticia.desc_noticia}" />
<p:outputLabel value="Foto" />
<h:inputFile value="#{cadastroNoticiaBean.arquivo}" />
</p:panelGrid>
</div>
</div>
</h:form>
</ui:define>
</ui:composition>
I tried several ways to solve this problem, so I found this search reference;
So I decided to bring the following solution below;
TROQUEI ESSA
<!-- p: é a referencia do PrimeFaces xmlns:p="http://primefaces.org/ui" -->
<p:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroNoticiaBean.salvar}">
<f:ajax execute="@form" render="@all"/>
</p:commandButton>
BY THAT
<!-- p: é a referencia do jsf xmlns:h="http://xmlns.jcp.org/jsf/html" -->
<h:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroNoticiaBean.salvar}">
<f:ajax execute="@form" render="@all"/>
</h:commandButton>
p: is PrimeFaces and h: is from JSF, when I changed the "p:" by "h:" got and I have succeeded in uploading to the folder.
The strange thing is that it worked even the page XHTML presents errors as shown in the figure below;
Mydoubtisasfollows;CanIuploadusingPrimeFacesFrameworks?
HowdoIusePrimeFacesFrameworkstouploadandwork?
WhydiditonlyworkwithJSF2FrameWorks?
Usingthisway;
<p:fileUploadfileUploadListener="#{cadastroNoticiaBean.arquivo}"
mode="advanced" dragDropSupport="false" update="messages"
sizeLimit="100000" fileLimit="3"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
give this error;
jul 30, 2015 10:37:41 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/noticias/CadastroNoticias.xhtml]
javax.faces.FacesException: Cannot find component for expression "messages" referenced from "form:j_idt41".
at org.primefaces.expression.SearchExpressionFacade.cannotFindComponent(SearchExpressionFacade.java:688)
at org.primefaces.expression.SearchExpressionFacade.resolveComponentById(SearchExpressionFacade.java:506)
at org.primefaces.expression.SearchExpressionFacade.resolveClientIds(SearchExpressionFacade.java:256)
at org.primefaces.expression.SearchExpressionFacade.resolveClientIds(SearchExpressionFacade.java:154)
at org.primefaces.component.fileupload.FileUploadRenderer.encodeScript(FileUploadRenderer.java:84)
at org.primefaces.component.fileupload.FileUploadRenderer.encodeEnd(FileUploadRenderer.java:72)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeDynamicBody(PanelGridRenderer.java:131)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeTableBody(PanelGridRenderer.java:102)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeTableLayout(PanelGridRenderer.java:65)
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:37)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1896)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)