xp:checkbox 读取和编辑模式下的值不同

xp:checkbox value differs in read and edit mode

在我的 xpage 上我放置了一个复选框:

<xp:checkBox id="cbOther" value="#{customerBean.customer.other}" disabled="#{!customerBean.customer.editable}" checkedValue="1" uncheckedValue="0">

在我的后端代码中,我尝试根据另一个字段的值设置复选框的值:

 if(doc.hasItem("fldOtherVal")){
                    if(doc.getItemValueString("fldOtherVal").equals("")){
                        System.out.println("no relations");
                        customer.setOther("0");
                    }else{
                        System.out.println("relations");
                        customer.setOther("1");
                        customer.setOtherVal(doc.getItemValueString("fldOtherVal"));    
                    }                           
                }else{
                    customer.setOther("0");
                }

当我在我的 xpage 中以读取模式打开客户对象时,这工作正常。但是当我将客户对象设置为编辑模式时,复选框中的值设置为默认值 0。

谁能解释一下我做错了什么?

我发现与您的 document/bean 不一致。 Chceckbox 绑定到 "other" 值,但有时指的是 "otherVal" field/property.

如果您保存的文档在 "fldOtherVal" 字段中包含值“0”,您的代码将变为

            System.out.println("relations");
            customer.setOther("1");
            customer.setOtherVal(doc.getItemValueString("fldOtherVal"));   

进入。在读取模式下它显示“1”,但再次将“0”写入 otherVal。

这是我的评论:

if(doc.getItemValueString("fldOtherVal").equals("")){

不检查“0”值。

编辑:

返回复选框的别名值(“0”和“1”)。

将您的脚本更新为此

 // no hasItem check needed
 var other = doc.getItemValue("fldOtherVal"); // must not be multivalue
 if ("".equals(other) || "0".equals(other)) {
      System.out.println("no relations");
      customer.setOther("0");
      customer.setOtherVal("0"); // update "otherVal" also
 } else {
      System.out.println("relations");
      customer.setOther("1");
      customer.setOtherVal("1"); // do not copy value, just set to "1"
 }

尝试删除 <xp:checkbox>disabled 属性 并改用 readonly 属性。实际上,保留 disabled 属性 不变并仅添加具有相同表达式的 readonly 属性 也应该有效。 如果有帮助,我会将此行为解释为对此答案的更新。