我想使用comboBox来显示多个位置。所有位置都存储在视图中。 我希望在domino目录中的person文档中显示默认位置=用户的位置。 我的问题是,默认值不适用于comboBox,但如果我在计算字段中显示它是正确的。如果我将值硬编码为默认值,则可以正常工作。
这是我的代码:
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:viewScope.get("UserLocation")}]]></xp:this.value>
</xp:text>
<xp:this.beforePageLoad><![CDATA[#{javascript:var sUserName:string=@Name("[ABBREVIATE]",@UserName());
var sServer:string=session.getCurrentDatabase().getServer();
if (sServer!=null)
{
var nDb:NotesDatabase=session.getDatabase(sServer,"names.nsf");
if (nDb!=null)
{
var vUser:NotesView=nDb.getView("($VIMPeople)");
if (vUser!=null)
{
var docUser:NotesDocument=vUser.getDocumentByKey(sUserName,true);
if (docUser!=null)
{
var sLocation:string=docUser.getItemValue("Location");
viewScope.put("UserLocation", sLocation);
}
}
}
}}]]></xp:this.beforePageLoad>
<xp:br></xp:br>
<xp:comboBox id="comboBox1">
<xp:this.defaultValue><![CDATA[#{javascript:viewScope.get("UserLocation")}]]></xp:this.defaultValue>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:@DbColumn(@DbName(),"Standorte",1)}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
<xp:br></xp:br>
<xp:comboBox id="comboBox2" defaultValue="Hamburg">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:@DbColumn(@DbName(),"Standorte",1)}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox></xp:view>
观点Standorte在第一列有城市,升序排序:柏林,法兰克福,汉堡...... 用户个人文档中的值是法兰克福。
浏览器中的输出是: computedfield1显示法兰克福(如预期) ComboBox1显示柏林(第一个值 - 不是计算的默认值) ComboBox2显示汉堡(正如预期的那样,因为硬编码的默认值)
有什么建议代码有什么问题吗?
答案 0 :(得分:2)
我会做一些事情来完成这项工作:
首先:确保UserLocation的viewScope条目是字符串而不是矢量。使用getItemValueString()而不是getItemValue();
if (docUser!=null) {
var sLocation:string=docUser.getItemValueString("Location");
viewScope.put("UserLocation", sLocation);
}
第二:确保UserLocation是组合框选择列表的一部分,即使它在查找中不存在:
var list = @DbColumn(@DbName(),"Standorte",1);
list.push(viewScope.get("UserCompany"));
return @Unique(list);
最后,我还要确保用户不是“匿名”,如果对names.nsf存在访问问题,可能会捕获session.getDatabase()。
if(sUserName == "Anonymous") return;
try {
var nDb:NotesDatabase=session.getDatabase(sServer,"names.nsf");
} catch(ex) {
return; // something went wrong opening the directory.
}
快乐的编码。
/ Newbs
答案 1 :(得分:0)
请检查以下