JSF组合框:显示Collection中的项目

ser*_*nni 2 jsf combobox items

我无法使用Java集合中的预定义数据填充JSF组合框.

后端,收集的简单存根:

PriceRecord pr = new PriceRecord();
pr.setTypeCode(Arrays.asList(123L,456L));
Run Code Online (Sandbox Code Playgroud)

这不起作用,组合框保持为空:

<h:selectOneMenu value="#{price.typeCode}" var="code">
    <f:selectItem value="#{code}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

Arj*_*jms 7

你给出的代码似乎没有多大意义.这个成语更像是这样的:

<h:selectOneMenu value="#{backingBean.typeCode}">               
    <f:selectItems value="#{backingBean.typeCodes}" var="typeCode" itemLabel="#{typeCode}" itemValue="#{typeCode}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

这里,#{backingBean.typeCode}是最初返回表示默认选定值的单个值的属性.如果它为空,则最初不会选择任何值.用户提交表单后,它将收到用户选择的值.对于你的代码,这将是类型Long.

#{backingBean.typeCodes}是返回用户可以选择的所有值的集合的属性.对于你的代码,这将是List<Long>.

因为您的值是简单的long,所以标签和值在这里是相同的.如果它是一个更复杂的对象,例如User,你可以使用类似于#{user.name}itemLabel和#{user.id}itemValue的东西.无论为itemValue呈现什么,都会被推入selectOneMenu组件的值绑定中.

另外一个提示:一般来说,您应该尽量避免SelectItem在后台bean中使用该类型.首选简单域对象及其集合,而不是JSF特定类型.