在我的Xpages表单中,我有两个字段,用户将从@DBLookup中选择值。它们是类别和子类别。
我使用组合框工作了,但后来我发现了Dojo Filtering Select!这是一个非常棒的控件,非常适合我需要做的事情,因为用户想要使用预先输入类型,只有当他们获得他们想要的值时才使用tab。
字段工作正常除了我无法填充第二个字段。它取决于第一个字段的值。
我的代码如下:
<xp:td>
<xp:label id="label3" value="Work Category" style="font-weight:bold"></xp:label>
</xp:td>
<xp:td>
<xe:djFilteringSelect id="djFilteringSelect2"
rendered="true" value="#{document1.workCategory}">
<xe:this.defaultValue><![CDATA[""]]></xe: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:eventHandler event="onBlur" submit="true" refreshMode="complete"></xp:eventHandler>
<xp:eventHandler event="onFocus" submit="true"
refreshMode="complete">
</xp:eventHandler></xe:djFilteringSelect></xp:td>
<xp:td>
<xp:message id="message3" for="workCategory"></xp:message>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label value="Work Sub Category"
id="workSubCategory_Label1" for="workSubCategory1" style="font-weight:bold">
</xp:label>
</xp:td>
<xp:td>
<xe:djFilteringSelect id="djFilteringSelect3"
rendered="true" value="#{document1.workSubCategory}">
<xe:this.defaultValue><![CDATA[""]]></xe:this.defaultValue>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var db:NotesDatabase = session.getCurrentDatabase();
var key:String = document1.getItemValueString("djFilteringSelect2");
@DbLookup(db,"(DBLookupWorkSubCategoryView)",key,2,"[FAILSILENT]");
}]]></xp:this.value>
</xp:selectItems>
</xe:djFilteringSelect></xp:td>
<td></td>
</xp:tr>
<xp:tr>
<xp:td>
答案 0 :(得分:1)
您指的是错误的字段名称(djFilteringSelect2而不是workCategory)。
另外,我建议您进行部分刷新而不是完全刷新。
我认为你不需要onBlur和onFocus活动。只需使用onChange事件即可。
<强>更新强>
此示例有效:
<xe:djFilteringSelect id="djFilteringSelect2" value="#{document1.workCategory}">
<xe:this.defaultValue><![CDATA[""]]></xe:this.defaultValue>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:
@DbColumn("", "workCategoryView", 1)
}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onChange" submit="true" refreshMode="partial" refreshId="djFilteringSelect3"></xp:eventHandler>
</xe:djFilteringSelect>
<xp:br></xp:br>
<xe:djFilteringSelect id="djFilteringSelect3" value="#{document1.workSubCategory}">
<xe:this.dojoAttributes>
<xp:dojoAttribute name="required" value="false"></xp:dojoAttribute>
</xe:this.dojoAttributes>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:
var key:String = document1.getValue("workCategory");
@DbLookup("","(DBLookupWorkSubCategoryView)",key,2,"[FAILSILENT]");
}]]></xp:this.value>
</xp:selectItems>
</xe:djFilteringSelect>
注意我是如何将第1次过滤选择中的值更改为document1.getItemValueString()更改为document1.getValue()。
另请注意,我添加了一个dojoAttribute来告诉第二个过滤选择它不是必需的,因为控件的所需行为导致onchange部分刷新失败而不运行。如果需要过滤选择,您可以改为添加额外的选择项作为默认值(mentioned here)。
答案 1 :(得分:0)
什么不起作用?在typeahead list中使用键盘选择值时,是否发生错误或未调用onChange?
您是否看过我之前关于此问题的答案? Xpages Dependent Field Lookups
用djFilteringSelect替换comboBox应该可以正常工作