我基本上有一个不能为空的文本字段,因此我添加了此验证:
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
中,所以我实际上并不能从onPrepareForSubmitFromEditForm
方法访问表单本身。 / p>
我怀疑这是一个普遍的问题,如果不是,请告诉我是否需要更多信息。
编辑,我已经评估了onValidateFromEditForm
中文本字段的状态:
如您所见,该字段确实被禁用,其值甚至都不为空。但是,在disabled
中,aArtsitNames =[ "Artist Name: \"TwnetyOnePiloits\" ","Artist Name: \"Bastile\" " ]
的tge值实际上为false,但是该字段的值仍然不为空。
答案 0 :(得分:0)
如果组件位于表单中,则可以在呈现/提交表单期间使用组件可用的内置environmental services之一,即ValidationTracker。使用该服务可以手动记录表单验证错误,即ValiadationTracker#recordError(Field field, String message)
。
但是,默认情况下,此类组件不会收到VALIDATE
事件,因为此事件是在Form
组件本身上触发的,并冒泡到其容器。当您需要对多个字段实施自定义验证时,此事件用于跨表单验证。您仍然可以使用ValidationTracker
来记录验证错误。
对于disabled
property of AbstractField
,如果其值为true
,则该组件将不参与验证,客户端和服务器端均不参与验证:
如果为true,则该字段将使用禁用的属性呈现(以关闭客户端行为)。提交表单后,将再次评估绑定值,如果为true,则将忽略(甚至不验证)字段的值,并且不会触发组件的事件。