Wicket DropDownChoice选择值

时间:2018-11-19 16:38:26

标签: java wicket dropdown

我正在尝试在DropDownChoice上获取所选选项的ID,但出现错误。 我知道,当我选择一个值时,我只是更新模型而不是对象(反射)。 我希望通过getModelObject()获得对象“ User”的所有值,但我得到的只是一个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 :(得分:1)

问题出在button.setDefaultFormProcessing(false)中。这告诉Wicket不要使用提交的值,也不要更新FormComponents的模型,即DropDownChoice将没有模型对象,因此不会设置selected

.setDefaultFormProcessing(false)通常用于Cancel按钮,您只想在其中保留表单。

答案 1 :(得分:0)

我不确定,但是我的问题与此question非常相似 有人告诉我不需要使用Ajax,但我会尝试看看它是否有效