Как получить значение из 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>

Вам не очень понятно, что именно вы хотите использовать в качестве значения элемента, поэтому я оставил его открытым.

Смотрите также:

Вам нужно изменить 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>
Другие вопросы по тегам