如何从项目标签中的 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 分别是映射条目的键和映射条目的值,在你的例子中分别是 TestClass
和 Object
。您似乎想将 TestClass
的 code
属性 显示为项目标签。所以,应该这样做:
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}"var="entry"
itemValue="#{...}" itemLabel="#{entry.key.code}" />
</h:selectOneMenu>
你不是很清楚你想用什么作为项目价值,所以我把它留着了。
另请参阅:
下面是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 分别是映射条目的键和映射条目的值,在你的例子中分别是 TestClass
和 Object
。您似乎想将 TestClass
的 code
属性 显示为项目标签。所以,应该这样做:
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}"var="entry"
itemValue="#{...}" itemLabel="#{entry.key.code}" />
</h:selectOneMenu>
你不是很清楚你想用什么作为项目价值,所以我把它留着了。