如何从 f:selectItems 获取标签和值
我正在开发一个 JSF 页面,该页面具有基于 List
的下拉列表:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
我需要获取当前所选项目的值和标签。现在我只得到价值。我也能得到这个标签吗?
I am working on a JSF page which has a dropdown based on List<SelectItem>
:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
I need to get both the value and label of the currently selected item. Right now I only get the value. How can I get the label, too?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你不能。这就是 HTML 的工作原理。要知道,JSF 是一个 HTML 代码生成器。 JSF
生成 HTML元素将仅发送所选
元素的
value
属性。它不会发送其标签。但这不应该是一个大问题。也就是说,您已经知道服务器端
#{bean.availableItems}
内的值和标签。要获取关联标签,您所需要做的就是通过值作为键来获取它。我建议将其设为Map
,它也可以在f:selectItems
中使用。基本启动示例:
with
和 in result
另一种方法是将名称和值包装在表示实体的 javabean 对象中,并通过转换器将整个对象设置为值。
另请参阅:
selectOneMenu
wiki 页面You can't. That's just how HTML works. You know, JSF is a HTML code generator. The JSF
<h:selectOneMenu>
generates a HTML<select><option>
. The HTML<select>
element will only send thevalue
attribute of the selected<option>
element. It will not send its label.But that shouldn't be a big issue. You namely already know both the value and label in the server side, inside the
#{bean.availableItems}
. All you need to do to get the associated label is to get it by the value as key. I suggest to make it aMap
which in turn can also be used inf:selectItems
.Basic kickoff example:
with
and in result
An alternative is to wrap both name and value in a javabean object representing an entity and set the whole object as value, via a converter.
See also:
selectOneMenu
wiki page我没有像这样尝试使用 Map,而且通过在 selectItems 标记中使用“ItemValue”属性,可以完美地在同一属性中获取 ItemValue 和 ItemLabel。如何在 ItemLabel 中没有提供额外的逗号 (@asfas....我遇到了你提到的同样的问题,所以我选择了这种方法)。
Bean Company 中的 IssueDesc 基本上是 String 类型
Instead of Using Map I tried like this and it's perfectly working for me to get both ItemValue and ItemLabel in the same property by using "ItemValue" attribute in selectItems tag.How ever provided no extra commas in the ItemLabel(@asfas....i had the same problem u mentioned so i selected this approach).
Basically IssueDesc is String type in Bean Company
如果值应该是 Integer 和 label String 并且在支持 bean 中都需要怎么办?在 bean 中使用 Map 不起作用,因为 JSF 将映射键解释为标签。理想情况下,它是一个 LinkedHashMap 并通过数字搜索文本。
通过文本(键)搜索数字(值)似乎是颠倒的。如果 JSF 的某些实现为测试添加了额外的空间或由于某种原因更改了字母大小写,该怎么办?然后从地图中找不到该值。
What if the the value should be Integer and label String and both are needed in backing bean. Using Map in bean doesn't work because JSF interprets the map key as label. Ideally it would be a LinkedHashMap and search the text by a number.
Seems upside down to search number (value) by a text (key). What if some implementation of JSF adds extra space to test or letter case changes for some reason. Then the value is not found from map.
这样就可以解决问题了。
在您的示例中,您将 availableItems 作为“list”传递,将 selectedItem 作为“selection”传递。该方法将返回与selectedItem对应的标签值。
This will do the trick.
In your example, you would pass in the availableItems as 'list' and selectedItem as 'selection'. This method will return the label value corresponding to the selectedItem.
以下方法对于使用 List 获取值和标签也可能很有用:
这里,facade、statesFacade 从数据库/企业 bean 获取状态列表。
在视图(xhtml 页面)中:
在托管 Bean(applicationBean1.java) 中:
The following approach may also be useful in getting value and label using List <SelectItem>:
Here, facade, statesFacade fetches list of states from database/enterprise bean.
In view (xhtml page):
In the Managed Bean(applicationBean1.java):