禁用字段上的 Tapestry 验证
Tapestry validation on disabled field
我基本上有一个可能不为空的文本字段,所以我添加了这个验证:
t:validate="required"
(我实际上还有一些验证标准,但它们与此处无关)。但是,有时也可以禁用此字段(它绑定到 Java 代码中的 属性):
t:disabled="isFieldADisabled"
此外,该值绑定到 属性:
t:value="entity.fieldA"
它的设计使得 属性 在该字段被禁用时永远不会为空。但是,当该字段被禁用时,我无法提交表单 - 即使文本框中显示了某些内容。我不知道这里发生了什么,但我随后尝试 manually 验证,就像那样:
@OnEvent(value = EventConstants.VALIDATE)
void onValidate(){
if (isFieldADisabled)
// What should I do here?
}
正如我的评论所指出的,我不确定在那里可以做什么。作为一个额外的并发症,整个事情都在 container
中,它本身包含在 form
中 - 所以我实际上无法从 onValidate
方法访问表单本身。
我怀疑这是一个普遍问题,如果不是,请告诉我您是否需要更多信息。
EDIT 我已经评估了 onPrepareForSubmitFromEditForm
中文本字段的状态:
如您所见,该字段确实被禁用,其值甚至不为空。但是在 onValidateFromEditForm
中 disabled
的 tge 值实际上是 false,但是该字段的值仍然不为空。
如果您的组件位于表单内,您可以使用其中一个内置 environmental services available to components during rendering/form submission, i.e. ValidationTracker。使用该服务可以手动记录表单验证错误,即 ValiadationTracker#recordError(Field field, String message)
.
这些组件默认情况下不会收到 VALIDATE
事件,因为此事件是在 Form
组件本身上触发的,并且会向上冒泡到其容器。当您需要对多个字段实现自定义验证时,此事件用于跨表单验证。您仍然可以使用 ValidationTracker
来记录验证错误。
至于disabled
property of AbstractField
,如果它的值为true
,组件将不会参与验证,无论是客户端还是服务器端:
If true, then the field will render out with a disabled attribute (to turn off client-side behavior). When the form is submitted, the bound value is evaluated again and, if true, the field's value is ignored (not even validated) and the component's events are not fired.
我基本上有一个可能不为空的文本字段,所以我添加了这个验证:
t:validate="required"
(我实际上还有一些验证标准,但它们与此处无关)。但是,有时也可以禁用此字段(它绑定到 Java 代码中的 属性):
t:disabled="isFieldADisabled"
此外,该值绑定到 属性:
t:value="entity.fieldA"
它的设计使得 属性 在该字段被禁用时永远不会为空。但是,当该字段被禁用时,我无法提交表单 - 即使文本框中显示了某些内容。我不知道这里发生了什么,但我随后尝试 manually 验证,就像那样:
@OnEvent(value = EventConstants.VALIDATE)
void onValidate(){
if (isFieldADisabled)
// What should I do here?
}
正如我的评论所指出的,我不确定在那里可以做什么。作为一个额外的并发症,整个事情都在 container
中,它本身包含在 form
中 - 所以我实际上无法从 onValidate
方法访问表单本身。
我怀疑这是一个普遍问题,如果不是,请告诉我您是否需要更多信息。
EDIT 我已经评估了 onPrepareForSubmitFromEditForm
中文本字段的状态:
如您所见,该字段确实被禁用,其值甚至不为空。但是在 onValidateFromEditForm
中 disabled
的 tge 值实际上是 false,但是该字段的值仍然不为空。
如果您的组件位于表单内,您可以使用其中一个内置 environmental services available to components during rendering/form submission, i.e. ValidationTracker。使用该服务可以手动记录表单验证错误,即 ValiadationTracker#recordError(Field field, String message)
.
这些组件默认情况下不会收到 VALIDATE
事件,因为此事件是在 Form
组件本身上触发的,并且会向上冒泡到其容器。当您需要对多个字段实现自定义验证时,此事件用于跨表单验证。您仍然可以使用 ValidationTracker
来记录验证错误。
至于disabled
property of AbstractField
,如果它的值为true
,组件将不会参与验证,无论是客户端还是服务器端:
If true, then the field will render out with a disabled attribute (to turn off client-side behavior). When the form is submitted, the bound value is evaluated again and, if true, the field's value is ignored (not even validated) and the component's events are not fired.