如何在以下情况下使用Wicket禁用内部表单验证?
外部表单包含一些带验证程序的字段,包括TextField。当用户关注TextField并按Enter键时,外部表单应该提交。
内部表单还有一些带有验证器和提交按钮的字段。
在外部表单中按Enter键TextField尝试提交表单,但也在内部表单中运行验证器,我想阻止它。
除了在内部表单中使用setDefaultFormProcessing(false)并在onSubmit方法中重写验证逻辑之外,还有其他方法吗?
答案 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 );
}
}