LongOperations"
Robertwenzel (talk | contribs) m |
Robertwenzel (talk | contribs) m (→Simple Sample) |
||
Line 13: | Line 13: | ||
== Simple Sample == | == Simple Sample == | ||
+ | |||
+ | <source lang="xml" high="3, 4"> | ||
+ | <div apply="org.zkoss.bind.BindComposer" | ||
+ | viewModel="@id('vm') @init('zk.example.longoperations.example.SimpleLongOperationViewModel')"> | ||
+ | <button onClick="@command('startLongOperation')" label="start"/> | ||
+ | <grid model="@load(vm.resultModel)" height="300px"/> | ||
+ | </div> | ||
+ | </source> | ||
+ | |||
+ | <source lang="java" high="10, 15, 26"> | ||
+ | public class SimpleLongOperationViewModel { | ||
+ | private ListModelList<String> resultModel = new ListModelList<String>(); | ||
+ | |||
+ | @Command | ||
+ | public void startLongOperation() { | ||
+ | LongOperation longOperation = new LongOperation() { | ||
+ | private List<String> result; | ||
+ | |||
+ | @Override | ||
+ | protected void execute() throws InterruptedException { | ||
+ | Thread.sleep(3000); | ||
+ | result = Arrays.asList("aaa", "bbb", "ccc"); | ||
+ | } | ||
+ | |||
+ | protected void onFinish() { | ||
+ | resultModel.addAll(result); | ||
+ | }; | ||
+ | |||
+ | @Override | ||
+ | protected void onCleanup() { | ||
+ | Clients.clearBusy(); | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | Clients.showBusy("Result coming in 3 seconds, please wait!"); | ||
+ | longOperation.start(); | ||
+ | } | ||
+ | |||
+ | public ListModelList<String> getResultModel() { | ||
+ | return resultModel; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
== Showing Operation updates/progress == | == Showing Operation updates/progress == |
Revision as of 07:30, 8 January 2015
Robert Wenzel, Engineer, Potix Corporation
January XX, 2015
ZK 7.0.4
Introduction
Longoperations are useful - bla - leverage Java Threads - bla - here how to hide and reuse the technical details. support MVVM and MVC programming model
Long Operations de-mystified
Simple Sample
<div apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('zk.example.longoperations.example.SimpleLongOperationViewModel')">
<button onClick="@command('startLongOperation')" label="start"/>
<grid model="@load(vm.resultModel)" height="300px"/>
</div>
public class SimpleLongOperationViewModel {
private ListModelList<String> resultModel = new ListModelList<String>();
@Command
public void startLongOperation() {
LongOperation longOperation = new LongOperation() {
private List<String> result;
@Override
protected void execute() throws InterruptedException {
Thread.sleep(3000);
result = Arrays.asList("aaa", "bbb", "ccc");
}
protected void onFinish() {
resultModel.addAll(result);
};
@Override
protected void onCleanup() {
Clients.clearBusy();
}
};
Clients.showBusy("Result coming in 3 seconds, please wait!");
longOperation.start();
}
public ListModelList<String> getResultModel() {
return resultModel;
}
}
Showing Operation updates/progress
Aborting a Long Operation
Exception Handling
Parallel Tasks
Extending LongOperation
Resulting Demo
The video below demonstrates the results of the two advanced usages described above. For ease of demonstration here we use a PDF printer so the resulting screen is a PDF file, but you can definitely specify a real printer to print out the desired results on papers. ERROR: Link hasn't been found
Summary
With the printing utility explained in the article, you can print the desired sections in a ZK page with only little effort -- you can even include custom headers & footers or change the style easily for better readability. For your convenience we have wrapped this utility as a ready-to-use jar file. Refer to download section to download the jar file and put it in your project's WEB-INF/lib folder.
Download
Comments
Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License. |