Hi Kasper,
It's a slight oddity in the way I resolve my beans (ui. uses my own
resolver to find the bean value) which should be ok.
I replaced my resolver class name with MyBean to try and simplify the
example.
doUpload( ) *does* get called.
The setFile( ) or getFile( ) don't get called, nor do
setValue("file",....) etc;
I'll move the example to a simple bean example tomorrow to be sure.
Oddly if I put a inputText field in a multi-part form it does not get
persisted to a bean through my resolver either.
If I make the form non multi-part the bean gets a setValue( ) called on
it through my resolver.
Why should it be any different?
Regards, Murray
Kasper Hansen wrote:
*Hi,*
I think you got a mismatch between your JSF code and Java class:
*value="#{ui.someUser.file}"*
MyBean
------------------------------------------------------------------------
*Fra:* Murray Brandon [mailto:[EMAIL PROTECTED]
*Sendt:* 11. april 2006 07:09
*Til:* MyFaces Discussion
*Emne:* File upload problem - setFile( ) never called, please help!
Hi all,
I'm having a problem trying to get file upload to work.
<h:form id="form1" name="form1" enctype="multipart/form-data" >
<h:outputText value="Please give me an image"/>
*<t:inputFileUpload id="fileupload"
accept="image/*"
value="#{ui.someUser.file}"
storage="file"
required="true"/>*
<h:commandButton value="Upload Now!"
action="#{ui.someUser.doUpload}" />
</h:form>
My bean effectively has this in it:
import org.apache.myfaces.custom.fileupload.UploadedFile;
:
:
public class MyBean
{
public void fileUploaded(ValueChangeEvent event)
{
UploadedFile file = (UploadedFile)event.getNewValue();
if (file != null)
{
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage("Successfully
uploaded file " + file.getName() + " (" + file.getSize() + " bytes)");
context.addMessage(event.getComponent().getClientId(context), message);
// Here's where we could call file.getInputStream()
}
else
{
System.out.println("fileUploaded called with no file");
}
}
public UploadedFile getFile()
{
return _file;
}
* public void setFile(UploadedFile file)
{
// never called!
_file = file;
}
*
public String doUpload()
{
UploadedFile file = getFile();
// ... and process it in some way
return (file != null ? file.getName() : "nullo");
}
private UploadedFile _file;
}
Please help!
Regards, Murray
================================================
extra notes:
1) I am using Facelets + Myfaces + Tomahawk + ADF faces.
2) For a start I get a javascript error on submit because
clear_form1(); does not exist not sure why it is missing.
The following html was generated:
<input id="form1:_id6" name="form1:_id6" type="submit" value="Upload
Now!" onclick="*clear_form1();*">
3) My web.xml
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>maxFileSize</param-name>
<param-value>20m</param-value>
<description>Set the size limit for uploaded files.
Format: 10 - 10 bytes
10k - 10 KB
10m - 10 MB
1g - 1 GB
</description>
</init-param>
</filter>
<!-- extension mapping for adding <script/>, <link/>, and other
resource tags to JSF-pages -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
<!-- extension mapping for serving page-independent resources
(javascript, stylesheets, images, etc.) -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
4) ADF faces file upload exhibits the same behaviour.
5) The file is definitely attempting to be uploaded because if I give
a really big file I get a SizeLimitExceededException.
Apr 11, 2006 4:58:58 AM
org.apache.myfaces.webapp.filter.MultipartRequestWrapper parseRequest
INFO: user tried to upload a file that exceeded file-size limitations.
org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:
the request was rejected because its size (337407087) exceeds the
configured maximum (104857600)
at
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
at
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)
at
org.apache.myfaces.webapp.filter.MultipartRequestWrapper.parseRequest(MultipartRequestWrapper.java:81)
at
org.apache.myfaces.webapp.filter.MultipartRequestWrapper.getParameterMap(MultipartRequestWrapper.java:177)
at
oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:184)
at
oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:80)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:130)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)