UISelectOne和UISelectMany的绑定值为同一属性

时间:2012-10-25 17:11:38

标签: jsf-2 selectonemenu

我试图在Prime Faces中创建动态调查应用程序。我有一个问题对象列表,每个问题对象都包含一个AnswerChoices列表。它们被赋予f:selectItems值属性。这可以。问题对象还包含一个selectedValues列表,该列表将提供给相关的selectOne / many组件。

因为我希望是通用的,所以会有一些问题有多个选定值,还有一些只有一个选定值。我希望能够将selectOne和selectMany组件指向相关Question对象中表示selectedValues的字符串列表。

这适用于selectMany组件,但不适用于需要指向单个对象而不是列表的selectOne组件。我是否有一个简单的方法可以解决这个问题 - 因为我希望只有一个对象代表所选的值,如果可能的话

1 个答案:

答案 0 :(得分:0)

您可以使用大括号表示法将值绑定到特定索引处的列表/数组项。下面的示例将值绑定到列表/数组的第1项。

<h:selectOneMenu value="#{bean.selectedAnswers[0]}" />

但是有一点需要注意:你需要在bean(post)构造期间自己准备单个项目的列表/数组。如果<h:selectOneMenu>,JSF / EL不会这样做。

E.g。

@PostConstruct
public void init() {
    selectedAnswers = new ArrayList<Answer>();
    selectedAnswers.add(null);
}

顺便说一下,为UISelectMany组件重用这个预初始化属性并没有坏处。