我在MVVM中发现了zk复选框的奇怪行为。我制作了一个MVVM表单,显示项目列表和所选项目的详细视图。我在详细视图上放置了复选框并将其绑定到我的POJO的布尔属性。当我选中具有此属性的true值的项目时,复选框显示为选中状态,但接下来当我选择具有false属性值的项目,然后选择具有true value的项目时,复选框将显示为未选中。 我可以使用ZK的MVVM教程http://books.zkoss.org/wiki/ZK_Getting_Started/Get_ZK_Up_and_Running_with_MVVM来解释这个问题(源代码http://sourceforge.net/projects/zkbook/files/GettingStarted/getzkup-20131127.zip/download)
添加到Car类布尔属性:
private Boolean cool = false;
public Car(Integer id, String model, String make, String description, String preview, Integer price, boolean cool){
this.id = id;
this.model = model;
this.make = make;
this.preview = preview;
this.description = description;
this.price = price;
this.cool = cool;
}
public Boolean getCool() {
return cool;
}
public void setCool(Boolean cool) {
this.cool = cool;
}
更改CarServiceImpl.java以初始化我们演示的布尔属性:
carList.add(
new Car(id++,
"Camry",
"Toyota",
"The Toyota Camry is a midsize car ... ",
"/img/car3.png",
24170, true));
carList.add(
new Car(id++,
"Century",
"Toyota",
"The Toyota Century is ... " ,
"/img/car4.png",
28730, true));
更改searchMvvm.zul(添加标记为INSERTED的行):
<window title="Search" width="600px" border="normal" apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('tutorial.SearchViewModel')">
<hbox align="center">
Keyword:
<textbox value="@bind(vm.keyword)" />
<button label="Search" image="/img/search.png" onClick="@command('search')" />
</hbox>
<listbox height="160px" model="@bind(vm.carList)" emptyMessage="No car found in the result"
selectedItem="@bind(vm.selectedCar)">
<listhead>
<listheader label="Model" />
<listheader label="Make" />
<listheader label="Price" width="20%"/>
<listheader label="Cool" /> <!-- INSERTED -->
</listhead>
<template name="model">
<listitem>
<listcell label="@bind(each.model)"></listcell>
<listcell label="@bind(each.make)"></listcell>
<listcell>$<label value="@bind(each.price)" /></listcell>
<listcell><checkbox checked="@bind(each.cool)" /></listcell> <!-- INSERTED -->
</listitem>
</template>
</listbox>
<hbox style="margin-top:20px">
<image width="250px" src="@bind(vm.selectedCar.preview)" />
<vbox>
<label value="@bind(vm.selectedCar.model)" />
<label value="@bind(vm.selectedCar.make)" />
<label value="@bind(vm.selectedCar.price)" />
<label value="@bind(vm.selectedCar.description)" />
<checkbox checked="@bind(vm.selectedCar.cool)" label="Cool" /> <!-- INSERTED -->
</vbox>
</hbox>
之后启动Tomcat并在浏览器中输入localhost:8080 / tutorial / searchMvvm.zul。当你点击丰田凯美瑞项目一切都很好,但当你点击日产Cifiro,然后再点击丰田凯美瑞再次在详细视图中的复选框将被取消选中。但是列表框中的复选框工作正常。
您知道解决此问题的任何解决方法吗?
答案 0 :(得分:0)
我遇到了同样的问题,但是当我使用getCool()
更改isCool()
时(在ZK V7上)修复了该问题
答案 1 :(得分:0)
我正在使用ZK7,我遇到了同样的问题。 我得到了:
Property 'standard' not readable on type
布尔标准上的,它有getter isStandard和setter setStandard
解决方案是:
就是这样!
答案 2 :(得分:0)
你应该使用
checkbox.setCheck(Boolean.valueOf(true));