Wicket DropDownChoice выбранное значение - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь получить Id выбранного варианта на DropDownChoice, но получаю ошибку. Я знаю, что при выборе значения я просто обновляю модель, а не объект (отражение).Я ожидал получить все значения объекта «Пользователь» через getModelObject (), но все, что я получил, это NullPointerException .. Я пробовал много вещей в соответствии с учебниками и документацией Wicket 8, но, похоже, ничего не работает ..

Мой код выглядит так:

  // POJO
    class User {
    private Integer id;
    private String name;
    [...]

    }

    // Main.class
    private User selected;

    ChoiceRenderer<User> choiceRenderer = new ChoiceRenderer<User>("id", "name");
    List<User> list = getUsers();

    final DropDownChoice<User> dropdown1 = new DropDownChoice<User>("dropdown",
                    new PropertyModel<User>(this, "selected"), list, choiceRenderer);


    Button btn = new Button("btn") {

                private static final long serialVersionUID = 1L;

                @Override
                public void onSubmit() {
                    RecrRemoteOperations recr = new RecrRemoteOperations();
                    try {

    // NullPointerException!
    // Integer id = dropdown.getModel().getObject().getId();
      // id: the id of the selected "User" value on dropdown
                        recr.updateCommand(id);

                    } catch (Throwable e) {
                        e.printStackTrace();
                    }
                }
            }.setDefaultFormProcessing(false);

    private static List<User> getUsers() {
    List<User> allUsers = new ArrayList<User>();
    [...]
    return list;
    }

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Проблема в button.setDefaultFormProcessing(false).Это говорит Wicket не использовать представленные значения и не обновлять модели FormComponents, то есть DropDownChoice не будет иметь объект модели и, таким образом, не будет устанавливать selected.

.setDefaultFormProcessing(false) обычно используетсядля кнопок Cancel, где вы просто хотите оставить форму.

0 голосов
/ 19 ноября 2018

Я не уверен, но моя проблема очень похожа на этот вопрос Мне сказали, что мне не нужно использовать Ajax, но я постараюсь проверить, работает ли он

...