是否可以在 orben 中隐藏或禁用 [​​=10=] 按钮,直到表单完成?

Is it possible in orben to hide or disable the "send" button until a form is finished?

此按钮的默认行为始终启用,如果字段是必填字段或不正确字段,则会显示错误。

但是如果你使用向导,你需要填写不同的部分,如果你还在表格的开头,提交表格是不正常的。可能您必须导航到所有部分以填写所有问题(至少是强制性问题),直到到达最后一部分。当您处于最后一部分时,您可以提交表格。至少,强制用户阅读所有表格。

我知道这种行为有点烦人,特别是对于没有太多 Orbeon 经验的用户,他们倾向于在完成第一部分后按下此按钮。

那么问题是:有什么方法可以隐藏或禁用 [​​=48=] 按钮直到到达最后一节?

编辑

documentation page所示Orbeon新版本2016.1终于隐藏了"submit"按钮。至少,显示了这段文字:

Wizard improvements. The wizard's table of contents indicates pages with errors more clearly. In validated mode, pages which cannot be navigated to are also indicated better. Last but not least, in validated mode, Save, Submit, Send, and other buttons which appear within the wizard only show when the user reaches the last page of the wizard. Finally, we made a few cosmetic improvements as well.

我正在尝试启用验证模式的新功能,在属性文件中:

<!-- Configure wizard layout -->
<property as="xs:string" name="oxf.fr.detail.view.appearance.*.*" value="wizard"/>
<property as="xs:boolean" name="oxf.xforms.xbl.fr.wizard.validate.*.*" value="true"/>

我使用表单生成器创建了一个简单的表单:

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ev="http://www.w3.org/2001/xml-events"
     xmlns:xi="http://www.w3.org/2001/XInclude"
     xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
     xmlns:exf="http://www.exforms.org/exf/1-0"
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:saxon="http://saxon.sf.net/"
     xmlns:sql="http://orbeon.org/oxf/xml/sql"
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder">
<xh:head>
    <xh:title>Wizard Test</xh:title>
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true">

        <!-- Main instance -->
        <xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all" xxf:index="id">
            <form>
                <section-1>
                    <control-2/>
                    <control-3/>

                </section-1>
                <section-4>
                    <control-5/>
                    <control-6/>
                </section-4>
                <section-7>
                    <control-8/>
                </section-7>
            </form>
        </xf:instance>

        <!-- Bindings -->
        <xf:bind id="fr-form-binds" ref="instance('fr-form-instance')">
            <xf:bind id="section-1-bind" name="section-1" ref="section-1">
                <xf:bind id="control-2-bind" ref="control-2" name="control-2" required="true()"/>
                <xf:bind id="control-3-bind" ref="control-3" name="control-3"/>

            </xf:bind>
            <xf:bind id="section-4-bind" ref="section-4" name="section-4">
                <xf:bind id="control-5-bind" ref="control-5" name="control-5" required="true()"/>
                <xf:bind id="control-6-bind" ref="control-6" name="control-6"/>
            </xf:bind>
            <xf:bind id="section-7-bind" ref="section-7" name="section-7">
                <xf:bind id="control-8-bind" ref="control-8" name="control-8" type="xs:boolean"
                         required="true()"/>
            </xf:bind>
        </xf:bind>

        <!-- Metadata -->
        <xf:instance xxf:readonly="true" id="fr-form-metadata" xxf:exclude-result-prefixes="#all">
            <metadata>
                <application-name>WizardTest</application-name>
                <form-name>WizardTest</form-name>
                <title xml:lang="en">Wizard Test</title>
                <description xml:lang="en"/>
                <singleton>false</singleton>
            </metadata>
        </xf:instance>

        <!-- Attachments -->
        <xf:instance id="fr-form-attachments" xxf:exclude-result-prefixes="#all">
            <attachments>
                <css mediatype="text/css" filename="" size=""/>
                <pdf mediatype="application/pdf" filename="" size=""/>
            </attachments>
        </xf:instance>

        <!-- All form resources -->
        <xf:instance xxf:readonly="true" id="fr-form-resources" xxf:exclude-result-prefixes="#all">
            <resources>
                <resource xml:lang="en">
                    <control-8>
                        <label>Yes or no?</label>
                        <hint/>
                    </control-8>
                    <control-5>
                        <label>Radio Button Other</label>
                        <hint/>
                        <item>
                            <label>First choice</label>
                            <value>1</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>2</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>3</value>
                            <hint/>
                        </item>
                    </control-5>
                    <control-6>
                        <label>Select</label>
                        <hint/>
                        <item>
                            <label>First choice</label>
                            <value>1</value>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>2</value>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>3</value>
                        </item>
                    </control-6>
                    <control-2>
                        <label>Radio Button</label>
                        <hint/>
                        <item>
                            <label>First choice</label>
                            <value>1</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>2</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>3</value>
                            <hint/>
                        </item>
                    </control-2>
                    <control-3>
                        <label>Radio Button Other</label>
                        <hint/>
                        <item>
                            <label>First choice</label>
                            <value>1</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Second choice</label>
                            <value>2</value>
                            <hint/>
                        </item>
                        <item>
                            <label>Third choice</label>
                            <value>3</value>
                            <hint/>
                        </item>
                    </control-3>
                    <section-1>
                        <label>Untitled Section</label>
                    </section-1>
                    <section-4>
                        <label>Section2</label>
                        <help/>
                    </section-4>
                    <section-7>
                        <label>Section3</label>
                        <help/>
                    </section-7>

                </resource>
            </resources>
        </xf:instance>

        <!-- Utility instances for services -->
        <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all">
            <request/>
        </xf:instance>

        <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all">
            <response/>
        </xf:instance>

    </xf:model>
</xh:head>
<xh:body>
    <fr:view>
        <fr:body xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:p="http://www.orbeon.com/oxf/pipeline"
                 xmlns:oxf="http://www.orbeon.com/oxf/processors">
            <fr:section id="section-1-control" bind="section-1-bind">
                <xf:label ref="$form-resources/section-1/label"/>
                <fr:grid>
                    <xh:tr>

                        <xh:td>
                            <xf:select1 id="control-2-control" appearance="full" bind="control-2-bind">
                                <xf:label ref="$form-resources/control-2/label"/>
                                <xf:hint ref="$form-resources/control-2/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>


                                <xf:itemset ref="$form-resources/control-2/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                    <xf:hint ref="hint"/>
                                </xf:itemset>
                            </xf:select1>
                        </xh:td>
                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <fr:open-select1 xmlns:xxbl="http://orbeon.org/oxf/xml/xbl" id="control-3-control"
                                             bind="control-3-bind">
                                <xf:label ref="$form-resources/control-3/label"/>
                                <xf:hint ref="$form-resources/control-3/hint"/>

                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                                <xf:itemset ref="$form-resources/control-3/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                    <xf:hint ref="hint"/>
                                </xf:itemset>
                            </fr:open-select1>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
            <fr:section id="section-4-control" bind="section-4-bind">
                <xf:label ref="$form-resources/section-4/label"/>
                <fr:grid>
                    <xh:tr>
                        <xh:td>
                            <fr:open-select1 xmlns:xxbl="http://orbeon.org/oxf/xml/xbl" id="control-5-control"
                                             bind="control-5-bind">
                                <xf:label ref="$form-resources/control-5/label"/>
                                <xf:hint ref="$form-resources/control-5/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>


                                <xf:itemset ref="$form-resources/control-5/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                    <xf:hint ref="hint"/>
                                </xf:itemset>
                            </fr:open-select1>
                        </xh:td>
                    </xh:tr>
                    <xh:tr>
                        <xh:td>
                            <fr:box-select xmlns="http://orbeon.org/oxf/xml/form-builder"
                                           xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
                                           xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                                           id="control-6-control"
                                           bind="control-6-bind">
                                <xf:label ref="$form-resources/control-6/label"/>
                                <xf:hint ref="$form-resources/control-6/hint"/>

                                <xf:alert ref="$fr-resources/detail/labels/alert"/>
                                <xf:itemset ref="$form-resources/control-6/item">
                                    <xf:label ref="label"/>
                                    <xf:value ref="value"/>
                                </xf:itemset>
                            </fr:box-select>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
            <fr:section id="section-7-control" bind="section-7-bind">
                <xf:label ref="$form-resources/section-7/label"/>
                <fr:grid>
                    <xh:tr>
                        <xh:td>
                            <fr:yesno-input xmlns="http://orbeon.org/oxf/xml/form-builder"
                                            xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
                                            id="control-8-control"
                                            bind="control-8-bind">
                                <xf:label ref="$form-resources/control-8/label"/>
                                <xf:hint ref="$form-resources/control-8/hint"/>
                                <xf:alert ref="$fr-resources/detail/labels/alert"/>


                            </fr:yesno-input>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
        </fr:body>
    </fr:view>
</xh:body>
</xh:html>

那么我希望,在这个例子中,提交按钮是隐藏的,并且只出现在最后一个部分,当所有其他部分都被填满时。但是当我到达表单末尾时,我看不到提交按钮。

我也试过仅启用一组按钮,将此行添加到属性文件中:

<property as="xs:string" name="oxf.fr.detail.buttons.*.*" value="wizard-prev wizard-next submit"/>

但本例中的 "submit" 按钮始终可见。

有没有我跳过的东西?

是的,这很有意义。不幸的是,在撰写本文时这是不可能的。但是,从好的方面来说,这是产品 "top RFE" 中的一个,因此我认为它很有可能会实施 "soon"。如果您希望在有新内容时收到通知,您可以自己订阅 issue #940: Better way to control buttons visibility/readonlyness