1

在我的表单中,我输入了文本,然后是 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) {
...

在 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");

但没有成功。

在表单中,我也有提交按钮,当我按下它时,每个想法都有效。我只是双击有问题

4

1 回答 1

6

AjaxEventBehavior本身不提交表单,因此您没有获得文本字段值。您可以改用以下子类之一:

  • AjaxFormComponentUpdatingBehavior将只提交FormComponent它所附加的那个。它需要附加到 FormComponent,因此如果要将其附加到整个组件,则必须使用以下内容ListItem
  • AjaxFormSubmitBehavior将提交整个表格。这可能是您在这里需要的。

所有这些行为都包含在 Wicket 中,它们的 Javadoc 就在源代码中。对于 Ajax 的东西,检查AbstractAjaxBehavior的子类,特别是AjaxEventBehavior.

于 2012-08-31T11:01:20.490 回答