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

How to get value from Map<TestClass,Object> in item label

下面是jsf代码

  <h:selectOneMenu>
  <f:selectItems value="#{bean.mapObject}"var="entity" 
  itemValue="#{entity.key}" itemLabel="#{entity.value.code}"/> 
  </h:selectOneMenu>

支持 bean 的映射定义为

 private Map<TestClass, Object> mapObject;

TestClass 有两个变量 getters/setters

 String code;
 String name; 

我遇到的问题是:在 JSF 上,在 Selectonemenu 上,对于 itemLabel,我想显示 TestClass String 值,即应该显示代码。

目前在 UI 上的 SelectOneMenu 上,我得到

 TestClass[code=t,name=anu] on the drop down, instead i want code value i..e 't'

请让我知道如何实现这一目标。

您需要更改 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>

如果是地图,<f:selectItems var> 应指定 Map.Entry。因此 <f:selectItems value> 应该指定 Collection<Map.Entry>。当您仅指定 Map(将出现在 JSF 2.3 中)时,这还不是本机识别的。

如果您打算使用地图键作为项目值和 ma:

,您基本上需要将值显式设置为 Map#entrySet(),如下所示
<h:selectOneMenu>
    <f:selectItems value="#{bean.mapObject.entrySet()}"var="entry" 
        itemValue="#{...}" itemLabel="#{...}" /> 
</h:selectOneMenu>

Map.Entry 对象有 getKey()getValue() 方法,return 分别是映射条目的键和映射条目的值,在你的例子中分别是 TestClassObject。您似乎想将 TestClasscode 属性 显示为项目标签。所以,应该这样做:

<h:selectOneMenu>
    <f:selectItems value="#{bean.mapObject.entrySet()}"var="entry" 
        itemValue="#{...}" itemLabel="#{entry.key.code}" /> 
</h:selectOneMenu>

你不是很清楚你想用什么作为项目价值,所以我把它留着了。

另请参阅: