如何在wicket行为中获得模型的价值

时间:2012-08-31 10:53:24

标签: java wicket

在我的表单中我输入了文本,然后是dataView:

private class RegistrationForm extends Form<Table> {

    private static final long serialVersionUID = 1L;

    public RegistrationForm(final Table table) {
        super("registrationForm", new CompoundPropertyModel<Table>(table));
        setOutputMarkupId(true);
        final TextField<String> text = new TextField<String>("name");
        add(text);
        DataView<Player> dataView = new DataView<Player>("rows", playerDataProvider) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(final Item<Player> listItem) {
...

on listItem当我双击行时添加ajaxEventBehavior:

                listItem.add(new AjaxEventBehavior("ondblclick") {

                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void onEvent(final AjaxRequestTarget target) {
                            System.out.println(table.getName());

                     }
                });

问题是,当我双击表时,它打印null而不是输入TextField中的值。为什么?

我尝试更新模型:

                            text.updateModel();

或从文本中获取价值:

                            System.out.println(table.getName() + "bbbbbbbbbbbbbbbbb" + text.getInput() + "vv"
                                    + text.getValue() + "ff");

但没有成功。

在表格中我也提交了按钮,当我按下它时,每个想法都有效。双击

我遇到了问题

1 个答案:

答案 0 :(得分:6)

AjaxEventBehavior本身不提交表单,因此您无法获取文本字段值。您可以改为使用以下子类之一:

  • AjaxFormComponentUpdatingBehavior只会提交附加的FormComponentListItem。它需要附加到FormComponent,因此如果要将其附加到整个AjaxFormSubmitBehavior,则必须使用以下内容:
  • AbstractAjaxBehavior将提交整个表单。这可能是你需要的。

所有这些行为都包含在Wicket中,他们的Javadoc就在那里,带有源代码。对于Ajax内容,请检查AjaxEventBehavior的子类,特别是{{1}}的子类。