Orbeon 4.2开关盒

时间:2013-06-18 08:54:10

标签: switch-statement orbeon

我正在尝试将我的orbeon升级为使用新的 orbeon 4.2 。但是我在源代码中使用的switch case中存在问题。尝试切换案例时遇到问题。

<xforms:action ev:event="xxforms-invalid" ev:observer="main">
            <xforms:toggle case="invalid-form-case" if="instance('main')/current_session/student_module_regn_status = 'Close'"/>
        </xforms:action>
        <xforms:action ev:event="xxforms-valid" ev:observer="main">
            <xforms:toggle case="valid-form-case" if="instance('main')/current_session/student_module_regn_status = 'Open'"/>
        </xforms:action>

以下是交换机案例的代码:

<xforms:switch>
<xforms:case id="invalid-form-case">
    Closed
</xforms:case>
<xforms:case id="valid-form-case">
    Open
</xforms:case>

谢谢

以下是重现问题的示例:

    <html xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xforms="http://www.w3.org/2002/xforms"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    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:widget="http://orbeon.org/oxf/xml/widget"
    xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes"
    xmlns:f="http://orbeon.org/oxf/xml/formatting"
    xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>test</title>
    <xhtml:link rel="stylesheet" href="/apps/uis-common/css/app-form.css" type="text/css"/>
    <xforms:model>
        <xforms:instance id="main">
            <mains>
                <test1>Open</test1>
            </mains>
        </xforms:instance>

        <xforms:action ev:event="xxforms-invalid" ev:observer="main">
            <xforms:toggle case="invalid-form-case" if="instance('main')/test1 = 'Close'"/>
        </xforms:action>

        <xforms:action ev:event="xxforms-valid" ev:observer="main">
            <xforms:toggle case="valid-form-case" if="instance('main')/test1 = 'Open'"/>
        </xforms:action>
    </xforms:model>
</head>

<body dir="ltr">
    <div>
        <table width="100%" id="wrapper" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td>
                    <xforms:switch>
                        <xforms:case id="invalid-form-case">
                            CLOSE
                        </xforms:case>
                        <xforms:case id="valid-form-case">
                            OPEN
                        </xforms:case>
                    </xforms:switch>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

它假设显示“OPEN”,因为“test1”是Open,但无论“test1”是什么,它只显示“CLOSE”

1 个答案:

答案 0 :(得分:0)

更改的原因如下:

在以前的版本中,每次重新验证时都会调度分派给xxforms-valid的{​​{1}}和xxforms-invalid个事件。在最近的版本中,此行为已更改为mentioned in the compatibility notes

根据XForms处理模型,在XForms初始化时,完成以下操作:

  • 创建模型和实例
  • 初始重新计算并重新验证
  • 创建控制树

在您的示例中,在创建控件树之前,将调度第一个xforms:instancexxforms-valid事件。这意味着您的事件处理程序找不到要切换的控件。在4.0之前,您可能会在创建控件树后至少发送一次xxforms-invalidxxforms-valid ,因此切换可以正常工作。

更好的解决办法可能是做这样的事情:

xxforms-invalid