我无法在Xpages中获得简单的两个字段依赖关系。
Field1是一个组合框,其选择来自DBLookup。
Field2是一个组合框,其选择来自DBLookup,它使用Field1中的值来对选择进行子集化。
我的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xp_1="http://www.ibm.com/xsp/coreex">
<xp:this.data>
<xp:dominoDocument var="document1" formName="timeEntry"></xp:dominoDocument>
</xp:this.data>
<xp:comboBox id="comboBox1">
<xp:this.defaultValue><![CDATA[#{javascript:""}]]></xp:this.defaultValue>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf');
@DbColumn(db, "workCategoryView", 1)}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onchange" submit="true"
refreshMode="complete">
</xp:eventHandler>
</xp:comboBox>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:comboBox id="comboBox2">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf');
var key:String = document1.getItemValueString("comboBox1");
@DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2);}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf');
var key:String = document1.getItemValueString("djFilteringSelect1");
@DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2);}]]></xp:this.value>
</xp:selectItems>
</xp:selectItems></xp:view>
我按照您的建议更新了代码,但它仍然无效。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xp_1="http://www.ibm.com/xsp/coreex">
<xp:this.data>
<xp:dominoDocument var="document1" formName="timeEntry"></xp:dominoDocument>
</xp:this.data>
<xp:comboBox id="comboBox1" value="#{document1.workCategory}">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf');
@DbColumn(db, "workCategoryView", 1)}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="comboBox2">
</xp:eventHandler>
</xp:comboBox>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:comboBox id="comboBox2" value="#{document1.workSubCategory}">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript://var db = new Array(@DbName()[0], 'TSCTT.nsf');
var key:String = document1.getItemValueString("comboBox1");
//@DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2);
//var key = document1.getItemValue("comboBox1");
//var key = currentDocument.getItemValueString("comboBox1")
key
//var item = document1.getValue("comboBox1");
//return item;}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
<xp:br></xp:br>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db = new Array(@DbName()[0], 'TSCTT.nsf');
var key:String = document1.getItemValueString("djFilteringSelect1");
@DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2);}]]></xp:this.value>
</xp:selectItems></xp:view>
答案 0 :(得分:3)
要改变的事情:
将onChange事件更改为第二个组合框的部分刷新
将您的组合框绑定到document1上的字段。现在它们没有绑定,因此您无法使用document1.getItemValueString()
删除放置在组合框之外的第3个selectItems标记
答案 1 :(得分:1)
我注意到value属性中的代码被评估了2次,所以我更喜欢对事件进行查找或计算:
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1"
formName="TestComboDependency">
</xp:dominoDocument>
</xp:this.data>
<xp:this.beforePageLoad><![CDATA[#{javascript:
viewScope.choiceList1 = @DbColumn("", "($LkpChoiceList1)", 1);
viewScope.choiceEmpty2 = " --- Select a value for combo1 before --- ";
viewScope.choiceList2 = null;
}]]></xp:this.beforePageLoad>
<xp:comboBox id="comboBox1" value="#{document1.Combo1}">
<xp:selectItem
itemLabel=" --- Select a value --- "
itemValue=""
id="selectItem1" />
<xp:selectItems
value="#{viewScope.choiceList1}"
id="selectItems1" />
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="comboBox2"
disableValidators="true">
<xp:this.action><![CDATA[#{javascript:
var sKey:string = document1.getItemValueString("Combo1");
viewScope.choiceEmpty2 = " --- Select a value --- ";
viewScope.choiceList2 = @DbLookup("", "($LkpChoiceList2)", sKey, 2);
}]]></xp:this.action>
</xp:eventHandler>
</xp:comboBox>
<xp:comboBox id="comboBox2" value="#{document1.Combo2}">
<xp:selectItem
itemLabel="#{viewScope.choiceEmpty2}"
itemValue=""
id="selectItem2" />
<xp:selectItems
value="#{viewScope.choiceList2}"
id="selectItems2" />
</xp:comboBox>
</xp:view>