如何从项目标签中的Map <testclass,object>获取值

时间:2015-05-10 07:21:01

标签: jsf dictionary jsf-2 selectonemenu

以下是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'

请告诉我如何实现这一目标。

2 个答案:

答案 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>