我为此问题进行了大量搜索,但没有解释说明我在搜索什么

我有一个像我最后发布的 class 。简而言之:PatternValidation的行为不同于手动验证。

例如:
AjaxEditableLabel有一个标签和一个编辑器,可切换以进行编辑(聚焦)以及取消或提交

如果我输入的内容对Patternvalidator无效,则该输入被标记为可以纠正它。如果再按Esc键,则将编辑器设置为不可见,并且标签再次为空。但是,如果我再次编辑标签,则该值仍在编辑器中,这是错误的。

如果我输入的内容通过了Patternvalidator,但在onSubmit方法内部无效,则该输入也被标记为一个,您也可以对其进行更正。但是,如果您不按Esc键,则将键入的值写在标签中,而不应该这样。我真的需要在onSubmit内部进行进一步的验证。

似乎在Validation部分之间,onSubmit()方法将值从Editor拖到Label。我心里有什么完全不对的地方吗?

一些示例代码:

public class MyEditableLabel extends AjaxEditableLabel<String>{
    public MyEditableLabel(String id, IModel<String> model) {
        super(id, model);
        PatternValidator patternValidator = new PatternValidator(Pattern.compile(
            "(^([0-9]|[0-1][0-9]|2[0-3]):([0-5][0-9])$)|((\\d{1,2})(,|\\.)(\\d\\d))"));
        this.add(patternValidator);
    }

    @Override
    protected void onSubmit(AjaxRequestTarget target) {
        // further validation
        if( editorValue.equals("00:00") ) { //just for example
            onError(target);
        } else {
            super.onSubmit(target);
        }
    }
}

最佳答案

显然,这是AjaxEditableLabel中的错误,它将在下一个Wicket版本中修复。

现在,您可以覆盖onCancel():

protected void onCancel(final AjaxRequestTarget target)
{
    super.onCancel();
    getEditor().clearInput();
}

09-28 02:23