2012-03-14 2 views
0

Я пытаюсь поставить автозаполнения, который извлекает предложения в виде списка Entry<String, Integer>Является ли это ошибкой в ​​автозаполнениях поверхностей?

<p:autoComplete completeMethod="#{suggester.suggestTopics}" 
      var="x1" itemLabel="#{x1.key}" itemValue="#{x1.value.toString()}" 
      value="#{topicController.selected}" /> 

сведущего боб код выглядит следующим образом:

private int selected; 

public int getSelected() { 
    return selected; 
} 

public void setSelected(int selected) { 
    this.selected= selected; 
} 

Но это не удается говоря, что класс Integer не имеет метода/свойства с именем key. Если я удалю атрибут value из автозаполнения, он начнет работать правильно. Но когда я добавляю атрибут value, он начинает ожидать, что объект внутри var должен быть того же типа, что и внутри атрибута value. Я полагаю/ожидаю, что объект внутри itemValue должен быть того же типа, что и внутри атрибута value.

Я хочу использовать POJO, для предложений, но передать только идентификатор объекта к значению


Использование: Primefaces 3.1 JSF 2.1.6

ответ

0

Я думаю, что вы хотите использовать Simple auto complete, но вместо этого вы посмотрели на неправильный пример на витрине Pojo Support

x1 относится к выбранному int - wh Ile его рассчитывают направить к POJO (с ключей и значений свойств.), поэтому вы получите сообщение

Integer класс не имеет метод/свойство с именем ключ

Или просто использовать Simple auto complete

+0

Я хочу использовать POJO для предложений, но передавать только идентификатор объекта до значения –

+0

Почему вы не передаете объект и не используете его атрибут id? – Daniel

+0

Мне не нравится этот подход, так как для этого требуется, чтобы я снова извлекал данные из БД, перестраивал конвертеры объектов и использования, которых иначе можно было бы избежать, передав entityId .. –

1

Я считаю/ожидать, что это должно быть, что объект внутри ItemValue должен быть того же типа, что внутри значения атрибута.

Да, это имеет смысл, и это то же самое в primefaces showcase:

<p:autoComplete value="#{autoCompleteBean.selectedPlayer1}" 
       id="basicPojo" 
       completeMethod="#{autoCompleteBean.completePlayer}" 
       var="p" itemLabel="#{p.name}" itemValue="#{p}" 
       converter="player" forceSelection="true"/> 

Как вы видите var="p" и itemValue="#{p} где р является экземпляром Player. И selectedPlayer1 также является экземпляром Player.

Я не знаю, работает ли он с Картой, поскольку пример Primefaces называется «поддержка Pojo», а предложения должны быть List элементов того же типа, что и в атрибуте value.

+0

спасибо Мэтту, но мне не очень нравится этот подход, когда мне нужно передать БД только идентификатор выбранного игрока, для этого требуется, чтобы я снова извлекал данные из БД, перестраивал объект игрока и использовал конвертеры, которые иначе могли бы быть сделаны, передав playerId ... –

+0

Я хочу используйте POJO для предложений, но передайте только идентификатор объекта в значение –

0

Как прокомментировал Мэтт, вам не нужно перестраивать Player (Pojo) с Db. Вы можете установить просто id-свойство Player (Pojo), и в методе действий этот идентификатор может использоваться для извлечения из базы данных.

В вашем случае в конвертора вы можете сделать

Entry<String, Integer> e = new Entry<String, Integer>(); 
e.setId(value) // where value is passed in to convertor in method getAsObject..... 

Это значение будет установлено на

Я использовал Pojo автозаполнения, но не пробовал с родовыми классами.

Надеюсь, это поможет.

0

Я знаю, что вопрос устарел, но у меня была та же проблема. Дело в том, что вам нужно назначить var для p (var = "p"). Я думаю, что это ужасно неочевидно (документация не упоминает, что это должно быть так), потому что я думал, что могу назначить любое имя var, которое я хочу.

Смежные вопросы