Apache wicket:如何明确更新表单?

时间:2012-05-28 07:38:06

标签: java validation wicket

我在页面上遇到ListView和验证问题。

我有ListView,在它下面我有TextField,用户可以在其中输入值。我的页面上有“发布”和“草稿保存”按钮。发布是一个按钮,其中显示弹出窗口(ModalWindow),用户应确认输入的数据。保存草稿正在保存而无需确认。两者都是SecuredAjaxLink对象。

当用户在TextField中输入数据时,它会保存在ListView中,但整个列表不会更新,因为用户应按下面的按钮添加。还行吧。

问题是,我有业务验证,检查用户输入的信息是否有一些规则。验证失败时,所有字段(包含错误信息)都会用css突出显示。要显式地将TextField中的值添加到ListView,我正在执行

target.addComponent(form);

这是在数据进入验证之前执行的。所以所有字段都会更新。这适用于发布按钮(具有确认ModalWindow),但不适用于没有弹出窗口的链接。据我所知,目标的生命周期有问题,但我坚持下去。

也许某人有类似的东西或知道答案?

如何在不使用弹出窗口的情况下更新页面?

这是代码: 草稿链接:

add(new SecuredAjaxSubmitLink(LinkNames.savelaterLink.toString(), form,
                RoleController.CONTROLLER.getAccessController()) {
            @Override
            public void onSubmit(AjaxRequestTarget target, Form form) {
                target.addComponent(form);
                insert(appl, false, form, target, new MainMenu(getString("accept.application.draft.success.message")), trail, checkbox);
            }

发布链接:

add(new CustomAjaxSubmitLink(LinkNames.submitLink.toString(), form,
                RoleController.CONTROLLER.getAccessController()) {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form form) {
                target.addComponent(form);
                publishPopup.show(target);
            }
        });

publishPopup.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
            public void onClose(AjaxRequestTarget target) {
                if (ApplicationInsertActionPanel.this.getSelectedAction() != null
                        && ApplicationInsertActionPanel.this.getSelectedAction().equals(Action.CONFIRM)) {
                    insert(appl,
                            true,
                            form,
                            target,
                            new MainMenu(ApplicationInsertActionPanel.this
                                    .getString("accept.application.publish.success.message")), trail, checkbox);
                }

            }
        });

我添加了

@Override
            protected void onError(final AjaxRequestTarget target, Form<?> form)
            {
                super.onError(target, form);
                target.addComponent(form);

到我的草稿链接,但页面仍未完全更新。 我想这是因为目标的生命周期没有结束,就像它在我使用弹出窗口时结束一样。弹出窗口打开“新页面”,旧目标可以更新,但是当我不使用弹出窗口时,页面保持不变。 所以现在我正在考虑一些解决方案来结束目标生命周期。我在考虑没有任何功能的透明弹出窗口,但实际上是非常脏的解决方案。

有什么想法吗?谢谢!                 }

1 个答案:

答案 0 :(得分:0)

我的英语不是很好,我完全不了解你的帖子。 是吗: 在Textfield中输入单词 - &gt;其中一个提交按钮 - &GT; listview上出现的字样? 如果要验证输入,为什么不使用继承自IValidator.class

的类

如果您想更新表单,可以在表单中添加更新行为

final AjaxFormSubmitBehavior            formbehavior    = new AjaxFormSubmitBehavior("onChange") {
    @Override
    protected void onError(AjaxRequestTarget arg0) {
        arg0.add(getForm());
    }

    @Override
    protected void onSubmit(AjaxRequestTarget arg0) {
        arg0.add(getForm());
    }
};

然后您可以将此行为添加到表单或将其扩展到您的需求

form.add(formbehavior)

我不知道你的问题是否与我的答案有某种关系,但我想你想知道如何在不加载新页面的情况下更新你的表格。