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
属性 也应该有效。
如果有帮助,我会将此行为解释为对此答案的更新。
在我的 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
属性 也应该有效。
如果有帮助,我会将此行为解释为对此答案的更新。