Wicket-ajax可以在不更改主体的情况下更新边界



我正试图在Wicket中实现一个带有帮助文本和验证图标的Bootstrap Validated Input字段。(http://getbootstrap.com/css/#forms-帮助文本)参见示例

我已经用Border(BootstrapFormGroup)封装了TextField和ComponentFeedbackPanel(Bootstrap FieldFeedbackPanel),其中控制了验证图标和表单组css类。

问题是,当我在keyDown/input事件后更新整个Border时,Text字段也会更新,光标会跳到起始位置,失去之前的插入位置。更改事件不会发生这种情况,但ajax验证只在我离开字段后发生,而不是在插入过程中发生。有没有一种方法可以在不触发正文内容(文本字段)更新的情况下更新边框?关于如何用标记封装文本字段,并且在不更改文本字段本身的内容/状态的情况下仍然能够控制封装表单组/验证图标的属性,您有其他建议吗?

    myUrl = new TextField<String>("url");
    myUrl.add(new UrlValidator(new String[]{"http", "https"}));
    myUrl.setLabel(new StringResourceModel("lbl.myLink", this, null));
    myUrl
        .setOutputMarkupId(true)
        .add(new AjaxFormComponentUpdatingBehavior("oninput") {
            private static final long serialVersionUID = 1L;
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                target.add(myLinkFeedback);
                formGroup.setFeedbackStatus(BootstrapFormGroup.VALIDATION_SUCCESS);
                target.add(formGroup);
            }
            @Override
            protected void onError(AjaxRequestTarget target, RuntimeException e) {
                target.add(myLinkFeedback);
                formGroup.setFeedbackStatus(BootstrapFormGroup.VALIDATION_ERROR);
                target.add(formGroup);
            }
        });
    formGroup = new BootstrapFormGroup("formGroup", new StringResourceModel("lbl.myLink", this, null));
    formGroup.setOutputMarkupId(true);
    formGroup.setShowFeedbackStatusIcon(true);
    formGroup.add(myUrl);

    myLinkFeedback = new BootstrapFieldFeedbackPanel("myLinkFeedbackField", myUrl);
    formGroup.add(myLinkFeedback);
    form.add(formGroup);

您可以引入类似FormGroup#repaint(AjaxRequestTarget)的方法,该方法只添加要重新绘制的子对象。

相关内容

最新更新