禁用字段上的 Tapestry 验证

我基本上有一个可能不为空的文本字段,所以我添加了这个验证:


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:

http://img2.mukewang.com/628ddbb2000174dd08900756.jpg

如您所见,该字段确实被禁用,其值甚至不是空的。然而在onValidateFromEditFormtge 中值disabled实际上是假的,但该字段的值仍然不是空的。



一只名叫tom的猫
浏览 88回答 1
1回答

慕尼黑8549860

如果您的组件在表单内,您可以在呈现/表单提交期间使用组件可用的内置环境服务之一,即ValidationTracker。使用该服务可以手动记录表单验证错误,即ValiadationTracker#recordError(Field field, String message).默认情况下,此类组件不会接收该VALIDATE事件,因为此事件在Form组件本身上触发并冒泡到其容器。当您需要对多个字段进行自定义验证时,此事件用于跨表单验证。您仍然可以ValidationTracker用来记录验证错误。至于 的disabled属性AbstractField,如果它的值为true组件不参与验证,客户端和服务端都不参与:如果为 true,则该字段将呈现禁用属性(以关闭客户端行为)。当表单被提交时,绑定的值会再次被评估,如果为真,那么字段的值将被忽略(甚至不被验证)并且组件的事件不会被触发。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java