我支持我的公司最老的和第一个XPages应用程序。该应用程序不使用Java任何东西,并使用SSJS的一切。我不想开始只为这一项任务使用java bean。
这个问题涉及java方法,我需要做同样的事情:Populating selectItems of the combobox (label, value) using a managed bean(虽然我知道这是更好的方法,我试图坚持已经建立的模式)
该应用将所有关键字加载到applicationScope中,然后在需要时使用它们。我正在尝试加载显示值并在存储时返回相关值。这类似于传统Notes多年来的表现。
我更改了applicationScope值以存储管道(|)之后的值,但我还没有弄清楚如何使用SSJS来使用该值。我开始怀疑它甚至是可能的。
我尝试使用核心组合框控件而不是Dojo组合框来生成我需要的代码。看起来你不能为标签和价值使用单独的“公式项”。有没有人想出这个解决方案,没有使用java集合。
答案 0 :(得分:2)
您可以在SSJS中使用Java类javax.faces.model.SelectItem
来填充selectItems:
<xp:comboBox id="comboBox1">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:
var item1 = new javax.faces.model.SelectItem("Value1", "Label1");
var item2 = new javax.faces.model.SelectItem("Value2", "Label2");
[item1, item2]
}]]></xp:this.value>
</xp:selectItems>
...
</xp:comboBox>
答案 1 :(得分:1)
您可以在SSJS中使用Java解决方案。您只需要var
而不是new
引用中的初始类名和完整的类名,因此java.util.ArrayList而不是ArrayList和javax.faces.model.SelectItem而不是SelectItem。见http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/xpages-best-practice-computed-selection-lists?opendocument&comments。
因此,您链接到转换为SSJS的StackOverflow问题中的代码应为:
var options = new java.util.ArrayList();
var option = new javax.faces.model.SelectItem();
option.setLabel("Here's a label");
option.setValue("Here's a value");
options.add(option);
return options;
答案 2 :(得分:0)
也许我错过了你的问题,因为我的回答相当简单,但是要使用JavaScript计算标签和值,请创建一个字符串的JavaScript数组,其中每个字符串的格式为“Label | Value”(垂直条是像Domino字段中的分隔符。)
霍华德