无法在xpage上的组合框中使用计算的默认值

时间:2012-03-16 13:47:31

标签: xpages

我想使用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显示汉堡(正如预期的那样,因为硬编码的默认值)

有什么建议代码有什么问题吗?

2 个答案:

答案 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)

请检查以下

  1. ssjs区分大小写。
  2. names.nsf和视图中的值是否相同?
  3. 在两个值上使用.trim以确保它们是相同的