代码之家  ›  专栏  ›  技术社区  ›  MetaColon

禁用字段上的Tapestry验证

  •  0
  • MetaColon  · 技术社区  · 6 年前

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

    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

    我怀疑这是一个普遍的问题,如果不是,请让我知道你是否需要更多的信息。

    编辑 我已在中评估了textfield的状态 onPrepareForSubmitFromEditForm :

    如您所见,该字段确实已禁用,其值甚至不是空的。然而在 onValidateFromEditForm 的tge值 disabled 实际上为false,但该字段的值仍然不是空的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Dmitry Gusev    6 年前

    如果组件位于表单中,则可以使用其中一个内置 environmental services ValidationTracker . 使用该服务可以手动记录表单验证错误,即。 ValiadationTracker#recordError(Field field, String message) .

    这样的组件不会收到 VALIDATE Form 组件本身和气泡上升到其容器。当需要对多个字段实施自定义验证时,此事件用于跨表单验证。你仍然可以使用 ValidationTracker

    至于 disabled property of AbstractField true