在我的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。
有人可以向我解释我在做什么错吗?
答案 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
属性也应该可行。
如果有帮助,我将在更新此答案时对此行为进行解释。