Orbeon 表单:单击“提交”后禁用表单字段

Posted

技术标签:

【中文标题】Orbeon 表单:单击“提交”后禁用表单字段【英文标题】:Orbeon form: Disable form fields after clicking "Submit" 【发布时间】:2021-08-04 13:27:21 【问题描述】:

我正在尝试配置“发送”进程以将所有字段设置为只读,但它不起作用。这是我在 properties.xml 中的配置:

        <property as="xs:string" name="oxf.fr.detail.process.send.*.*">
            require-valid
            then save
            then success-message("save-success")
            then xf:setvalue(ref = "//*[xf:readonly]", value = "true()")
        </property>

感谢所有建议!

【问题讨论】:

【参考方案1】:

您不能使用xf:setvalue 以命令式的方式设置“只读”。相反,“只读”是以声明的方式定义的。在你的情况下,我建议:

    当表单提交时,你改变表单的阶段,说“提交”。在您的流程中,您可以使用 (doc):

     set-workflow-stage(name = "submitted")
    

    在表单生成器中,您使用表单级公式 (doc) 来声明如果阶段“已提交”,则整个表单是只读的。公式如下所示:

     fr:workflow-stage-value() = 'submitted'
    

另见博文New workflow capabilities in Orbeon Forms 2020.1。

【讨论】:

感谢@avernet,我们是否可以选择默认为系统中的每个表单构建器应用此 fr:workflow-stage-value() = 'submitted'? @Tien 是的,您可以,因为这是在您的properties-local.xml 中定义的流程中完成的,例如使用oxf.fr.detail.process.submit.*.* 之类的属性名称,其中*.* 表示此流程适用于所有应用程序和所有表格。您可以在Wildcards in properties 部分找到更多相关信息。 嗨@avernet,是否可以在创建时为表单构建器只读公式设置默认值?我正在尝试类似: @Tien 我猜你想避免不得不为每个表单设置整个表单是只读的,如果`fr:workflow-stage-value() = 'submitted'`。不幸的是,此时,这不能在属性中定义,而只能在 Form Builder 中定义。 -亚历克斯 @Tien 但是你的建议是有道理的。我为此创建了一个增强请求:#4931。 -亚历克斯

以上是关于Orbeon 表单:单击“提交”后禁用表单字段的主要内容,如果未能解决你的问题,请参考以下文章

表单提交后如何禁用以前禁用的选择

如何使用表单验证防止重复提交

单击属于表单的另一个按钮时如何禁用提交表单

单击提交清除文件字段而不是提交表单(IE9)

验证输入字段后如何提交表单

每次单击按钮时都在提交表单