Suggested case list:
Using timer to refresh a grid
383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlinkuser model to move item to another listbox
120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlinkDisabled list item row passed to VM-1981
296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlinkDisabled list item row passed to VM-1981
295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlinkDisabled list item row passed to VM-1981
294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlinkgrid sample with ListModel/RowRenderer
816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlinkgrid sample with ListModel/RowRenderer
809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlinkgrid sample with ListModel/RowRenderer
196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlinkgrid sample with ListModel/RowRenderer
195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlinkgrid sample with ListModel/RowRenderer
194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlinkgrid sample with ListModel/RowRenderer
193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlinkgrid sample with ListModel/RowRenderer
192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlinkgrid sample with ListModel/RowRenderer
191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlinkHierarchy table without using ZK PE/EE
1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlinkgrid sample with ListModel/RowRenderer
128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlinkuser model to move item to another listbox
1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlinkUsing timer to refresh a grid
1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlinkFire a event from child iframe
1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlinkTextbox input restriction sample
1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlinkTest web core taglib in ZUL
1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlinkLatest 10 Fiddles :
Textbox input restriction sample
1guest172.71.137.1339ahuuhJan 12, 2025 6:43:16 AMlinkZK MVVM Converter
21guest172.71.137.13816cf90oJan 12, 2025 6:35:27 AMlinkTemplate composition and include
35guest172.70.246.66vroi36Jan 10, 2025 3:44:06 PMlinkTemplate composition and include
34guest172.70.246.66vroi36Jan 10, 2025 3:43:42 PMlinkTemplate composition and include
33guest172.70.246.66vroi36Jan 10, 2025 3:42:59 PMlinkTemplate composition and include
32guest172.70.246.67vroi36Jan 10, 2025 3:41:58 PMlinkTemplate composition and include
31guest172.70.246.66vroi36Jan 10, 2025 3:41:25 PMlinkTemplate composition and include
30guest172.70.246.66vroi36Jan 10, 2025 3:39:35 PMlinkTemplate composition and include
29guest172.70.246.66vroi36Jan 10, 2025 3:39:09 PMlinkTemplate composition and include
28guest172.70.246.67vroi36Jan 10, 2025 3:37:54 PMlinkError Messages
41fse87.175.28.215gckeonJan 18, 2018 9:56:19 AMlinkresources
index.zulzul<zk>
<div
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('pkg$.TestVM')"
validationMessages="@id('vmsgs')"
form="@id('fx') @load(vm.record) @save(vm.record, before='save')">
<vlayout>
<spinner
value="@bind(fx.value1) @validator(vm.validator, name='spinner1')" />
<label value="@load(vmsgs.spinner1)" />
</vlayout>
<vlayout>
<spinner
value="@bind(fx.value2) @validator(vm.validator, name='spinner2')"
constraint="@load(vm.getConstraint('spinner2', vmsgs))" />
<label value="@load(vmsgs.spinner2)" />
</vlayout>
<button label="save" onClick="@command('save')" />
</div>
</zk>TestVM.javajava
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.sys.ValidationMessages;
import org.zkoss.bind.ValidationContext;
import org.zkoss.bind.Validator;
import org.zkoss.bind.validator.AbstractValidator;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.CustomConstraint;
import org.zkoss.zul.SimpleConstraint;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
public class TestVM {
public abstract class MyConstraint extends SimpleConstraint implements CustomConstraint {
private static final long serialVersionUID = 1L;
protected ValidationMessages _vmsgs;
protected String _field;
public MyConstraint(String name, ValidationMessages vmsgs) {
super("");
_field = name;
_vmsgs = vmsgs;
}
}
Record _record = new Record();
public Record getRecord() {
return _record;
}
public void setRecord(Record record) {
_record = record;
}
public Validator getValidator() {
return new AbstractValidator() {
@Override
public void validate(final ValidationContext ctx) {
Object value = ctx.getProperty().getValue();
String name = (String) ctx.getBindContext().getValidatorArg("name");
if (((Integer) value) >= 100) {
addInvalidMessage(ctx, name, "value must be < 100");
}
}
};
}
public Constraint getConstraint(String name, ValidationMessages vmsgs) {
return new MyConstraint(name, vmsgs) {
@Override
public void showCustomError(Component comp, WrongValueException ex) {
if (ex != null) {
_vmsgs.addMessages(comp, "value", _field,
new String[] { ex.getLocalizedMessage() });
} else {
_vmsgs.clearMessages(comp);
}
BindUtils.postNotifyChange(null, null, _vmsgs, ".");
}
};
}
@Command
public void save() {
}
}
Record.javajava
public class Record {
int _value1 = 2147483647;
int _value2 = 2147483647;
public int getValue1() {
return _value1;
}
public void setValue1(int value) {
_value1 = value;
}
public int getValue2() {
return _value2;
}
public void setValue2(int value) {
_value2 = value;
}
}