以下是jsf代码
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject}"var="entity"
itemValue="#{entity.key}" itemLabel="#{entity.value.code}"/>
</h:selectOneMenu>
Backing bean将map定义为
private Map<TestClass, Object> mapObject;
TestClass有两个变量和getters / setters
String code;
String name;
我遇到的问题是:在JSF上,在Selectonemenu上,对于itemLabel,我想显示TestClass字符串值,即应显示代码。
目前在UI上的SelectOneMenu上,我正在
TestClass[code=t,name=anu] on the drop down, instead i want code value i..e 't'
请告诉我如何实现这一目标。
答案 0 :(得分:4)
<f:selectItems var>
如果是地图,则应指定Map.Entry
。因此<f:selectItems value>
应指定Collection<Map.Entry>
。当您只指定Map
(将在JSF 2.3中提供)时,这尚未被本地识别。
您基本上需要将值显式设置为Map#entrySet()
,如果您打算将map键用作项目值并且ma:
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}"var="entry"
itemValue="#{...}" itemLabel="#{...}" />
</h:selectOneMenu>
Map.Entry
对象具有getKey()
和getValue()
方法,它们分别返回映射条目的键和映射条目的值,分别为TestClass
和{{1} }}。您似乎希望将Object
code
属性显示为项目标签。所以,这应该做:
TestClass
你不清楚你想用什么作为物品价值,所以我把它打开了。
答案 1 :(得分:0)
您需要更改itemlabel
属性(使用当前值entity.value.code
)。 应该由entity.key.code
替换?
同样value
需要调用方法.entrySet
,因为地图本身不是集合。
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.key.code}"/>
</h:selectOneMenu>
或者,因为它是您想要的密钥,您可以立即迭代密钥。
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.keySet()}" var="key"
itemValue="#{key}" itemLabel="#{key.code}"/>
</h:selectOneMenu>