Это ошибка в автозаполнении простых лиц? - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь поставить автозаполнение, которое выбирает предложения в виде списка 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

Ответы [ 4 ]

1 голос
/ 14 марта 2012

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

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

<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}, где p - это экземпляр Player. И selectedPlayer1 также является экземпляром Player.

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

0 голосов
/ 19 марта 2014

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

0 голосов
/ 14 марта 2012

Как прокомментировал Мэтт, вам не нужно перестраивать 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.....

Это значение будет установлено на private Entry<String, Integer> selected

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

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

0 голосов
/ 14 марта 2012

Я думаю, что вы хотите использовать Простое автоматическое заполнение , но вместо этого вы посмотрели неправильный пример на витрине Поддержка Pojo

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

Целочисленный класс не имеет метода / свойства с именем key

Или просто используйте Простое автоматическое заполнение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...