Fileupload"
Line 44: | Line 44: | ||
=== Event Thread Disabled === | === Event Thread Disabled === | ||
− | When the event thread is disabled (default), the execution won't be suspended when <javadoc method="get()">org.zkoss.zul.Fileupload</javadoc> is called. In other words, the returned value is always null. | + | When the event thread is disabled (default), the execution won't be suspended when <javadoc method="get()">org.zkoss.zul.Fileupload</javadoc> is called. In other words, the returned value is always null. To retrieve the uploaded files, the developer has to listen the <tt>onUpload</tt> event, which is sent when the uploading is completed. |
+ | |||
+ | By default, the <tt>onUpload</tt> event is sent to all root components. For example, <javadoc>org.zkoss.zul.Div</javadoc> will, in the following example, receive the <tt>onUpload</tt> event. | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <div onUpload="processMedia(event.getMedias());"> | ||
+ | <zscript deferred="true"><![CDATA[ | ||
+ | import org.zkoss.util.media.Media; | ||
+ | |||
+ | public void processMedia(Media[] media) { | ||
+ | if (media != null) { | ||
+ | for (int i = 0; i < media.length; i++) { | ||
+ | if (media[i] instanceof org.zkoss.image.Image) { | ||
+ | image.setContent(media[i]); | ||
+ | } else { | ||
+ | Messagebox.show("Not an image: " + media[i], "Error", | ||
+ | Messagebox.OK, Messagebox.ERROR); | ||
+ | break; //not to show too many errors | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ]]></zscript> | ||
+ | <vbox> | ||
+ | <button label="Upload" onClick="Fileupload.get(-1);" /> | ||
+ | <image id="image" /> | ||
+ | </vbox> | ||
+ | </div> | ||
+ | </source> | ||
+ | |||
+ | If you prefer to send the event to a particular component, you have to specify it in the desktop attribute called <tt>org.zkoss.zul.Fileupload.target</tt>. For example, | ||
+ | |||
+ | <source lang="java"> | ||
+ | desktop.setAttribute("org.zkoss.zul.Fileupload.target", uploadHandler); | ||
+ | //assume uploadHandler is a component | ||
+ | </source> | ||
=== Event Thread Enabled === | === Event Thread Enabled === |
Revision as of 06:57, 3 September 2010
Fileupload
- Demonstration: FileUpload
- Java API: Fileupload
- JavaScript API: Fileupload
Employment/Purpose
There are two ways to use Fileupload: uses Fileupload as a component to upload files, or invoke Fileupload.get() to open a dialog to upload files.
Use as a Component
Fileupload itself is a component. You can use it directly as follows.
<fileupload label="Upload">
<attribute name="onLoad">
org.zkoss.util.media.Media media = event.getMedia();
//then, you can process media here
</attribute>
</button>
Fileupload is actually a button with upload=true
. In other words, the above is equivalent to
<button label="Upload" upload="true">
...
Invoke the Static Method: get
Fileupload provides a set of static methods to simplify the file uploading, such as Fileupload.get(), Fileupload.get(String, String), and so on.
The behavior is a little bit different depending on if the event thread is enabled (default: it is disabled[1]).
- ↑ Prior to 5.0, it is default to enabled. Refer to ZK Configuration Reference: disable-event-thread.
Event Thread Disabled
When the event thread is disabled (default), the execution won't be suspended when Fileupload.get() is called. In other words, the returned value is always null. To retrieve the uploaded files, the developer has to listen the onUpload event, which is sent when the uploading is completed.
By default, the onUpload event is sent to all root components. For example, Div will, in the following example, receive the onUpload event.
<div onUpload="processMedia(event.getMedias());">
<zscript deferred="true"><![CDATA[
import org.zkoss.util.media.Media;
public void processMedia(Media[] media) {
if (media != null) {
for (int i = 0; i < media.length; i++) {
if (media[i] instanceof org.zkoss.image.Image) {
image.setContent(media[i]);
} else {
Messagebox.show("Not an image: " + media[i], "Error",
Messagebox.OK, Messagebox.ERROR);
break; //not to show too many errors
}
}
}
}
]]></zscript>
<vbox>
<button label="Upload" onClick="Fileupload.get(-1);" />
<image id="image" />
</vbox>
</div>
If you prefer to send the event to a particular component, you have to specify it in the desktop attribute called org.zkoss.zul.Fileupload.target. For example,
desktop.setAttribute("org.zkoss.zul.Fileupload.target", uploadHandler);
//assume uploadHandler is a component
Event Thread Enabled
Specify the target component
Since 5.0.2, if the event thread is disabled, an onUpload event is posted to all root components when the upload dialog is closed.
If you want the event being sent to a particular component, specify the component in the desktop's attribute called
org.zkoss.zul.Fileupload.target
.
For example,
desktop.setAttribute("org.zkoss.zul.Fileupload.target", mainWindow);
Fileupload.get(); //then mainWindow will receive the onUpload event
Example
<image id="img" />
Upload your hot shot:
<fileupload onUpload="img.setContent(event.media)" />
Supported events
None | None |
Supported Children
*NONE
Use cases
Version | Description | Example Location |
---|---|---|
Version History
Version | Date | Content |
---|---|---|
5.0.2 | May 2010 | Able to specify a target for the onUpload event sent by Fileupload.get(). Used if the event thread is disabled. |