【发布时间】:2014-02-03 16:35:30
【问题描述】:
我的页面中有一个组合,我想用配置中的一些关键字填充该组合。我想使用托管 bean 来完成它。
假设我有一个名为 Config 的 bean,其中有一个 List categories 字段。 ..
public class Configuration implements Serializable {
private static final long serialVersionUID = 1L;
private List<String> categories;
public List<String> getCategories() {
if (categories == null)
categories = getCats();
return categories;
}
//... etc.
}
当我将此字段用于我的组合时,它运行良好...
<xp:comboBox>
<xp:selectItems>
<xp:this.value><![CDATA[#{config.categories}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
但是,它只是一个标签列表。我也需要价值观。如何使用两个字符串(一个标签和一个值)填充我的组合的 selectItems?
编辑:
我尝试创建一个带有标签和值字段的对象 Combo,并在我的组合框中使用重复。
<xp:comboBox>
<xp:repeat id="repeat1" value="#{config.combo}" var="c" rows="30">
<xp:selectItem itemLabel="#{c.label}" itemValue="#{c.value}" />
</xp:repeat>
</xp:comboBox>
还是不行... :-(
【问题讨论】:
-
使用管道 (
|) 分隔符...例如someList.add("I'm a label|I'm a value"); -
好的,管道可以工作,但这是一个愚蠢的解决方案。如果该关键字字符串包含管道字符怎么办?难道没有使用简单对象和某种转换器的另一种解决方案吗?
-
我不会说这很傻。几十年来,通过管道分隔标签和值在Notes中很常见,例如用于对话框列表选择。您仍然可以用另一个字符替换数据中的管道。但老实说,哪些数据本质上包含管道?
-
我知道这是 Notes 开发的传统,老实说,我希望这种非概念性的东西在 JSF 开发中消失。
-
现在我明白了,Mark 的代码当然比使用管道要好得多,尤其是 SelectItemGroup 是一个不错的附加:)
标签: xpages