Xpages,Compute组合框值

时间:2014-11-05 23:58:03

标签: xpages

我有一个组合框,其值为10,20,30,40,50,当我创建文档并在视图中显示它出现的数字但我想显示其标签(标签是文本)而不是数字。 有人可以帮我找出如何解决这个问题。 感谢

2 个答案:

答案 0 :(得分:2)

我倾向于将给定复选框的值添加到资源包中,然后从xp:selectItems和xp:viewColumn值访问该资源包。

首先,我将创建一个资源包,我将其设置为" label",其中包含以下值:

itemsList_status=Draft|0,Published|1,Archived|-1
itemsList_delimiter=,

以下是xp的一个示例:xp:selectobtem:

<xp:selectItems>
 <xp:this.value>
  <![CDATA[#{javascript:return getSelectItems('status');}]
 </xp:this.value>
</xp:selectItems>

这是我的getSelectItems()SSJS函数:

var getSelectItems : function(key) {
 try {
    var returnObj = new Array();
    var items = null;
    switch(key) {
    case "status" : 
        items = @Text(label.itemsList_status).split(label.itemsList_delimiter);
        break
    }
    for( var n=0, l=items.length; n < l; n++) {
        returnObj.push(items[n]);
    }
    return returnObj;
 } catch(e) {
    print(database.getTitle() + " SSJS Error for getSelectItems()");
    print(e.toString());
 }
}

运行此函数,它将返回3个读取Draft,Published和Archived的选项,同时分别实际存储0,1和-1。您遇到的问题 - 以及使用这种抽象的存储标签的方法:资源包中的值+ SSJS来解决 - 当您去读取值但实际上想要显示标签时...

这是我的getSelectedValue()函数:

var getSelectedValue : function(key, thisValue) {
 try {
    var returnObj = new Array();
    var items = null;
    switch(key) {
    case "status" : 
        items = @Text(label.itemsList_status).split(label.itemsList_delimiter);
        break
    }
    var s = "";
    var l = "";
    for( var n=0, i=items.length; n < i; n++) {
        if(items[n].indexOf("|") == -1) {
            s = items[n];
            l = items[n];
        } else {
            s = items[n].split("|").pop();
            l = items[n].split("|").shift();
        }
        if(thisValue == s) {
            return l;
        }
    }
    return thisValue;

 } catch(e) {
    print(database.getTitle() + " SSJS Error for getSelectedValue()");
    print(e.toString());
 }
}

现在,您传递当前值和所需的label:value Resource Bundle项目句柄,此函数会吐出相关标签。以下是我在xp:viewColumn:

中使用它的方法
<xp:viewColumn
 id="viewColumn_status">
 <xp:this.value><![CDATA[#{javascript:return ""}]]></xp:this.value>
  <xp:text
   value="#{javascript: return         
    getSelectedValue('status',thisEntry.getDocument().getItemValueString('status'))}" />
 <xp:viewColumnHeader
  value="#{label.viewColumnHeader_posts_status}"
  id="viewColumnHeader_status">
 </xp:viewColumnHeader>
</xp:viewColumn>

......那就是它 - 资源包条目&#34; itemList_status&#34;充当标签:值对的权威主人,因此您只需检查输入建筑物并对其进行解构以标记存储值。

希望这有帮助!

答案 1 :(得分:1)

使用别名类似于正常形式的用法。 为值使用公式项:

return ["- Please select -|", "ten|10", "twenty|20", "thirty|30"];

但请记住,存储的值始终是TEXT而不是数字。

相关问题