我正试图在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)
的方法,该方法只添加要重新绘制的子对象。