在wicket中禁用嵌套表单验证

时间:2014-10-22 08:08:07

标签: forms validation wicket

如何在以下情况下使用Wicket禁用内部表单验证?

外部表单包含一些带验证程序的字段,包括TextField。当用户关注TextField并按Enter键时,外部表单应该提交。

内部表单还有一些带有验证器和提交按钮的字段。

在外部表单中按Enter键TextField尝试提交表单,但也在内部表单中运行验证器,我想阻止它。

除了在内部表单中使用setDefaultFormProcessing(false)并在onSubmit方法中重写验证逻辑之外,还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

Form组件正在验证时,它会检查所有嵌套表单并仅在其方法isEnabledInHierarchy() && isVisibleInHierarchy()返回true时验证它们。您无法覆盖validate()方法(仅onValidate(),但会在处理完实际验证后执行),因此我看到的唯一选项(有您的限制)是禁用嵌套表单处理外形时。

您必须覆盖外部表单的process()方法,如下所示:

final Form<Void> innerForm =....;

final Form<Void> outerForm = new Form<Void> ( "outer" )
{
    public void process ( IFormSubmitter submittingComponent )
    {
        innerForm.setEnabled ( false );
        super.process ( submittingComponent );
        innerForm.setEnabled ( true );
    }
}