AjaxEditableLabel和Validator的行为让我很困惑

时间:2014-08-20 21:20:28

标签: java wicket

我搜索了很多这个问题,但没有解释说明我在寻找什么

我有一个像我最后发布的课程。非常简短:PatternValidation的行为与手动验证不同。

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

如果我输入的Patternvalidator无效,则输入标记为可以更正。如果然后按Esc,编辑器将设置为不可见,标签再次为空。但是如果我再次编辑标签,那么值仍然在编辑器中,这是错误的。

如果我做了一个传递了Patternvalidator的输入,但在onSubmit方法中无效,那么输入也被标记为你也可以更正它。但是,如果您按Esc键入的值将写入标签中,而这不应该是。我真的需要在onSubmit中进一步验证。

似乎是Validation部分和onSubmit()方法之间的东西将编辑器中的值拉到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);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

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

现在你可以覆盖onCancel():

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