Как получить значение из Map<TestClass, Object> в метке элемента
Ниже приведен код JSF
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject}"var="entity"
itemValue="#{entity.key}" itemLabel="#{entity.value.code}"/>
</h:selectOneMenu>
Бэк-бин имеет карту, определенную как
private Map<TestClass, Object> mapObject;
TestClass имеет две переменные и геттеры / сеттеры
String code;
String name;
У меня есть проблема: На JSF, на Selectonemenu, для itemLabel я хотел бы отобразить значение строки TestClass, т. Е. Код должен отображаться.
В настоящее время на SelectOneMenu на пользовательском интерфейсе, я получаю
TestClass[code=t,name=anu] on the drop down, instead i want code value i..e 't'
Пожалуйста, дайте мне знать, как добиться этого.
2 ответа
<f:selectItems var>
следует в случае карт указать Map.Entry
, <f:selectItems value>
поэтому следует указать Collection<Map.Entry>
, Это не признается изначально, когда вы просто указываете Map
(придет в JSF 2.3).
Вам в основном нужно явно установить значение Map#entrySet()
как показано ниже, если вы собираетесь использовать ключ карты в качестве значения элемента и ма:
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}"var="entry"
itemValue="#{...}" itemLabel="#{...}" />
</h:selectOneMenu>
Map.Entry
объект имеет getKey()
а также getValue()
методы, которые возвращают соответственно ключ записи карты и значение записи карты, которые в вашем случае соответственно TestClass
а также Object
, Вы, кажется, хотите отобразить code
собственностью TestClass
как ярлык элемента. Итак, это должно сделать:
<h:selectOneMenu>
<f:selectItems value="#{bean.mapObject.entrySet()}"var="entry"
itemValue="#{...}" itemLabel="#{entry.key.code}" />
</h:selectOneMenu>
Вам не очень понятно, что именно вы хотите использовать в качестве значения элемента, поэтому я оставил его открытым.
Смотрите также:
- наш
selectOneMenu
вики-страница
Вам нужно изменить 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>