xp:复选框的值在读取和编辑模式下有所不同

时间:2018-08-13 10:24:16

标签: java xpages

在我的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。

有人可以向我解释我在做什么错吗?

2 个答案:

答案 0 :(得分:0)

我发现与您的文档/ bean不一致。 Chceckbox绑定到“其他”值,但有时引用“ otherVal”字段/属性。

如果您保存的文档在“ 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"
 }

答案 1 :(得分:0)

尝试删除disabled的{​​{1}}属性,并改用<xp:checkbox>属性。实际上,将readonly属性保持不变,而只添加具有相同表达式的disabled属性也应该可行。 如果有帮助,我将在更新此答案时对此行为进行解释。