xforms:如何防止 xxforms:默认值覆盖用户输入

发布于 2024-09-10 09:35:19 字数 2700 浏览 3 评论 0原文

我有一个下拉菜单来显示状态,可以是启用(true)或禁用(false)。这是我的 xml 实例。

<?xml version="1.0" encoding="UTF-8"?>
    <page>
        <file-name></file-name>
        <status></status>
    </page>

默认情况下,状态应为 true。所以我将其设置为绑定,如下所示。

<xforms:bind nodeset="./status" xxforms:default="true()" />

当用户在下拉列表中选择禁用时,状态应保存为 false。这是我保存表单时保存的 xml。

<page>
    <file-name>StatusDisabled.xml</file-name>
    <status>false</false>
</page>

当我在编辑模式下打开表单时,这是我在 XML 检查器小部件中获得的 xml。

<page>
    <file-name>StatusDisabled.xml</file-name>
    <status>true></status>
</page>

由于 xxforms:default,状态被设置为 true,即使 xml 使用 false 状态值保存。

我该如何解决这个问题?

这是xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms">

    <head>
        <title>XForms Default</title>

        <xforms:model>
            <xforms:instance id="instance">
                <page>
                    <name xmlns=""/>    
                    <status xmlns=""/>
                </page>
            </xforms:instance>

            <xforms:instance id="status-instance">
                <items>
                    <item label="Enabled" value="true" xmlns=""/>
                    <item label="Disabled" value="false" xmlns=""/>
                </items>
            </xforms:instance>

            <xforms:bind nodeset="instance('instance')">
                <xforms:bind nodeset="./status" xxforms:default="true()" />
            </xforms:bind>

        </xforms:model>
    </head>
    <body>
        <p>
            <xforms:input ref="instance('instance')/name" incremental="true">
                <xforms:label>Please enter your name:</xforms:label>
            </xforms:input>
        </p>
        <p>
            <xforms:select1 ref="instance('instance')/status" appearance="minimal" incremental="true">
                <xforms:label>Please select status:</xforms:label>
                <xforms:itemset nodeset="instance('status-instance')/item">
                    <xforms:label ref="./@label"/>
                    <xforms:value ref="./@value"/>
                </xforms:itemset>
            </xforms:select1> 
        </p>
    </body>
</html>

I have a dropdown to display status, which can be Enabled(true) or Disabled(false). Here is my xml instance.

<?xml version="1.0" encoding="UTF-8"?>
    <page>
        <file-name></file-name>
        <status></status>
    </page>

By default, status should be true. So I have set it in binding as follows.

<xforms:bind nodeset="./status" xxforms:default="true()" />

When user chooses Disabled in the dropdown, the status should get saved as false. Here is the xml that gets saved when I save the form.

<page>
    <file-name>StatusDisabled.xml</file-name>
    <status>false</false>
</page>

When I open the form in edit mode, this is the xml I get in the XML inspector widget.

<page>
    <file-name>StatusDisabled.xml</file-name>
    <status>true></status>
</page>

Status gets set to true because of xxforms:default, even though the xml is saved with a false value for status.

How can I fix this?

Here is the xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms">

    <head>
        <title>XForms Default</title>

        <xforms:model>
            <xforms:instance id="instance">
                <page>
                    <name xmlns=""/>    
                    <status xmlns=""/>
                </page>
            </xforms:instance>

            <xforms:instance id="status-instance">
                <items>
                    <item label="Enabled" value="true" xmlns=""/>
                    <item label="Disabled" value="false" xmlns=""/>
                </items>
            </xforms:instance>

            <xforms:bind nodeset="instance('instance')">
                <xforms:bind nodeset="./status" xxforms:default="true()" />
            </xforms:bind>

        </xforms:model>
    </head>
    <body>
        <p>
            <xforms:input ref="instance('instance')/name" incremental="true">
                <xforms:label>Please enter your name:</xforms:label>
            </xforms:input>
        </p>
        <p>
            <xforms:select1 ref="instance('instance')/status" appearance="minimal" incremental="true">
                <xforms:label>Please select status:</xforms:label>
                <xforms:itemset nodeset="instance('status-instance')/item">
                    <xforms:label ref="./@label"/>
                    <xforms:value ref="./@value"/>
                </xforms:itemset>
            </xforms:select1> 
        </p>
    </body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

却一份温柔 2024-09-17 09:35:19

如果发生这种情况,那就是一个错误。 xxforms:default 只能评估一次。

If this happens, it's a bug. xxforms:default should only be evaluated once.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文