wicket DropDownChoice Не определен метод get для класса - PullRequest
1 голос
/ 23 января 2011

Я использую DropDownChoice, его ключ и значение являются свойством username объекта User. Но когда я отправляю сообщение, я получаю следующую ошибку. Не определен метод get для класса: class java.lang.String выражение: username.

Когда форма отправлена, я хочу, чтобы вход формы был установлен на свойство name объекта SearchPerson, я загружаю раскрывающийся список с помощью пользователей (список пользователей). Отображение и значение моего окна выбора - имя пользователя

<select name="select" wicket:id="name" id="select">
                    <option value="test">test</option>
                </select>

form.add(new DropDownChoice("name",new PropertyModel(searchPerson, "name"),users,new ChoiceRenderer( "username", "username" )));

Ответы [ 2 ]

3 голосов
/ 23 января 2011

Вы пытаетесь вставить User в свойство String (searchPerson.name).Либо сделайте users a List<Strings>, либо заставьте DropDownChoice иметь IModel<User>.

[отредактировано]

И эта ошибка, вероятно, происходит, потому что компонент пытается получитьключевое свойство текущего значения модели.Таким образом, он берет searchPerson.name и пытается получить из него значение свойства username, которого, очевидно, не существует, поскольку это String, а не User.

[обновлено]

Если вы хотите автоматически заполнить текстовое поле, вы можете попробовать DefaultCssAutocompleteTextField из расширений калитки.И вы можете запросить базу данных (я полагаю, Hibernate) для имен пользователей напрямую вместо пользователей, вместо того, чтобы перебирать список пользователей в памяти.

0 голосов
/ 27 марта 2013

PropertyModel - хороший выбор для таких задач. Тема является объектом и имеет строковое имя. Я переопределил метод toString () в теме, чтобы присвоить ему имя, и он работает должным образом. Я предлагаю использовать этот метод.

topicDropDown = new DropDownChoice<Topic>("topicOptions", new PropertyModel<Topic>       (this.top, "topicOptions"), new LoadableDetachableModel<List<Topic>>() {
        @Override
        protected List<Topic> load() {
            return top.getAllTopics();

        }
...