ZK框架中使用MVVM的奇怪复选框行为

ZK框架中使用MVVM的奇怪复选框行为,mvvm,checkbox,zk,Mvvm,Checkbox,Zk,我在MVVM中发现了zk复选框的奇怪行为。我制作了一个MVVM表单,显示项目列表和所选项目的详细视图。我将复选框放在详细视图上,并将其绑定到POJO的布尔属性。当我选择一个属性值为真的项目时,复选框显示为选中状态,但接下来当我选择一个属性值为假的项目,然后再次选择一个属性值为真的项目时,复选框显示为未选中状态。 我可以用ZK的MVVM教程(源代码)来说明这个问题 添加到汽车类布尔属性: private Boolean cool = false; public Car(Integer id, S

我在MVVM中发现了zk复选框的奇怪行为。我制作了一个MVVM表单,显示项目列表和所选项目的详细视图。我将复选框放在详细视图上,并将其绑定到POJO的布尔属性。当我选择一个属性值为真的项目时,复选框显示为选中状态,但接下来当我选择一个属性值为假的项目,然后再次选择一个属性值为真的项目时,复选框显示为未选中状态。 我可以用ZK的MVVM教程(源代码)来说明这个问题

添加到汽车类布尔属性:

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(添加标记为插入的行):


关键词:
$

然后启动Tomcat并在浏览器中输入localhost:8080/tutorial/searchMvvm.zul。当您单击丰田凯美瑞项目时,一切正常,但当您单击日产Cifiro,然后再次单击丰田凯美瑞时,detaled视图中的复选框将显示为未选中状态。但listbox中的复选框工作正常


你知道解决这个问题的方法吗?

我也有同样的问题,但是当我用
isCool()
(在zkv7上)更改
getCool()
时,它被修复了。

我正在使用ZK7,我也遇到了同样的问题。 我得到一个:

Property 'standard' not readable on type 
在布尔标准上,有getter-isStandard和setter-setStandard

解决办法是:

  • 使用布尔值(对象)时,必须使用get前缀
  • 使用布尔值(原语)时,可以使用is前缀
就这样

您应该使用

checkbox.setCheck(Boolean.valueOf(true));

zk7中的已知错误,zk6没有此问题,因此如果您可以降级,您有一个解决方案如果您有新问题,请单击按钮询问。如果这个问题有助于提供上下文,请包含一个指向该问题的链接
checkbox.setCheck(Boolean.valueOf(true));