为了账号安全,请及时绑定邮箱和手机立即绑定

禁用字段上的 Tapestry 验证

禁用字段上的 Tapestry 验证

一只名叫tom的猫 2022-05-25 15:32:42
我基本上有一个可能不为空的文本字段,所以我添加了这个验证:t:validate="required"(我实际上还有一些验证标准,但它们在这里不相关)。但是,有时也可以禁用此字段(它绑定到 Java 代码中的属性):t:disabled="isFieldADisabled"此外,该值绑定到一个属性:t:value="entity.fieldA"它被设计成当字段被禁用时属性永远不会为空。但是,当该字段被禁用时,我无法提交表单 - 即使文本框中显示了某些内容。我不知道这里发生了什么,但我随后尝试手动验证,如下所示:@OnEvent(value = EventConstants.VALIDATE)void onValidate(){    if (isFieldADisabled)        // What should I do here?}正如我的评论指出的那样,我不确定在那里做什么。作为一个额外的复杂性,整个事情都在 acontainer中,它本身包含在 a form- 所以我真的无法从onValidate方法中访问表单本身。我怀疑这是一个普遍问题,如果不是,请告诉我您是否需要更多信息。编辑我已经评估了文本字段的状态onPrepareForSubmitFromEditForm:如您所见,该字段确实被禁用,其值甚至不是空的。然而在onValidateFromEditFormtge 中值disabled实际上是假的,但该字段的值仍然不是空的。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

如果您的组件在表单内,您可以在呈现/表单提交期间使用组件可用的内置环境服务之一,即ValidationTracker。使用该服务可以手动记录表单验证错误,即ValiadationTracker#recordError(Field field, String message).

默认情况下,此类组件不会接收该VALIDATE事件,因为此事件在Form组件本身上触发并冒泡到其容器。当您需要对多个字段进行自定义验证时,此事件用于跨表单验证。您仍然可以ValidationTracker用来记录验证错误。

至于 的disabled属性AbstractField,如果它的值为true组件不参与验证,客户端和服务端都不参与:

如果为 true,则该字段将呈现禁用属性(以关闭客户端行为)。当表单被提交时,绑定的值会再次被评估,如果为真,那么字段的值将被忽略(甚至不被验证)并且组件的事件不会被触发。


查看完整回答
反对 回复 2022-05-25
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信