JSF 组合框:显示集合中的项目
我无法使用 Java 集合中的预定义数据填充 JSF 组合框。
后端,用于收集的简单存根:
PriceRecord pr = new PriceRecord();
pr.setTypeCode(Arrays.asList(123L,456L));
这不起作用,组合框保持为空:
<h:selectOneMenu value="#{price.typeCode}" var="code">
<f:selectItem value="#{code}"/>
</h:selectOneMenu>
I can't populate a JSF combo box with predefined data from a Java collection.
Backend, simple stub for collection:
PriceRecord pr = new PriceRecord();
pr.setTypeCode(Arrays.asList(123L,456L));
This doesn't work, the combo box remains empty:
<h:selectOneMenu value="#{price.typeCode}" var="code">
<f:selectItem value="#{code}"/>
</h:selectOneMenu>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您给出的代码似乎没有多大意义。习惯用法更像是这样的:
这里,
#{backingBean.typeCode}
是最初返回表示默认选定值的单个值的属性。如果为空,则最初不会选择任何值。用户提交表单后,它将收到用户选择的值。对于您的代码,这将是Long
类型。#{backingBean.typeCodes}
是返回用户可以选择的所有值的集合的属性。对于您的代码,这将是List
。因为您的值是简单的长整型,所以这里的标签和值是相同的。如果它是一个更复杂的对象,例如用户,您可以使用类似
#{user.name}
的 itemLabel 和#{user.id}
作为 itemValue 。为 itemValue 呈现的内容都会被推送到selectOneMenu
组件的值绑定中。另一个提示:一般来说,您应该尽量避免在支持 bean 中使用
SelectItem
类型。更喜欢简单的域对象及其集合,而不是 JSF 特定类型。The code you've given doesn't seem to make a lot of sense. The idiom is more like this:
Here,
#{backingBean.typeCode}
is the property that initially returns the single value that represents the default selected value. If it's empty, no value is initially selected. After the user submits the form, it will receive the value the user selected. For your code this would be of typeLong
.#{backingBean.typeCodes}
is the property that returns a collection of all the values a user can choose between. For your code this would beList<Long>
.Because your values are simple longs, the label and value is the same here. If it was a more complex object like e.g. a User, you could use something like
#{user.name}
for the itemLabel and#{user.id}
for the itemValue. Whatever is rendered for itemValue is what is pushed into the value binding of theselectOneMenu
component.One other hint: in general you should try to avoid using the type
SelectItem
in your backing beans. Prefer simple domain objects and collections of them instead of JSF specific types.我不确定问题到底是什么,但我可以给您一个非常简单的示例,说明如何使用
组件。price.xhtml:
PriceBean.java:
有关
SelectItem
。如果你想直接使用一个特殊的对象,例如一个名为Price
的对象,你必须使用转换器。 这里显示了一个示例。I'm not sure what exactly the question is, but I can give you a very simple example how you could use the
<h:selectOneMenu />
component.price.xhtml:
PriceBean.java:
Further informations about the
SelectItem
. If you want to use a specially object directly, for example an object calledPrice
, you have to use a converter. Here an example is shown.假设使用 JSF 2.0,请尝试使用
。 官方文档中的示例:Assuming JSF 2.0, try
<f:selectItems>
instead. Example from the official docs:为了使您的页面正常工作,您可以使用
c:forEach
来迭代项目:To make your page just work you can use
c:forEach
to iterate items: