Что заставляет Orbeon Forms выполнять бесконечную повторную проверку XForm до тех пор, пока она не получит переполнение стека

Я использую Orbeon Forms CE версии orbeon-4.0.0.M11.201210030654-CE.

У меня была XForm (XHTML) с несколькими экземплярами, и я сделал привязку с required="true()" к одному из экземпляров и использовал xxforms-invalid и xxforms-valid для переключения случаев. Ниже приведены некоторые примеры кода из моего файла xform.

<xforms:instance id="teaching-load-instance" src="oxf:/apps/uis-common/model/uis-teaching-load-xforms-instance.xml"/>

<xforms:bind nodeset="instance('teaching-load-instance')/teaching_load">
    <xforms:bind nodeset="module_id" required="true()"/>
</xforms:bind>

<xforms:action ev:event="xxforms-invalid" ev:observer="teaching-load-instance">
    <xforms:toggle case="invalid-form-case"/>
</xforms:action>

<xforms:action ev:event="xxforms-valid" ev:observer="teaching-load-instance">
    <xforms:toggle case="valid-form-case"/>
</xforms:action>

При доступе к этой странице xform будет выдана ошибка stackoverflow.

Вот журналы отладки из файла orbeon.log.

2012-10-23 21:42:42,470 DEBUG XFormsServer  -         start dispatching {name: "xxforms-valid", target: "month-instance"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -           start performing default action {}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -           end performing default action {time (ms): "0"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -         end dispatching {time (ms): "0"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -         start dispatching {name: "xxforms-valid", target: "verification-instance"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -           start performing default action {}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -           end performing default action {time (ms): "0"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -         end dispatching {time (ms): "0"}
2012-10-23 21:42:42,470 DEBUG XFormsServer  -         start dispatching {name: "xxforms-valid", target: "modules-instance"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -           start performing default action {}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -           end performing default action {time (ms): "0"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -         end dispatching {time (ms): "1"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -         start dispatching {name: "xxforms-invalid", target: "teaching-load-instance"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -           start handler {name: "xxforms-invalid", phase: "target", observer: "teaching-load-instance"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -             interpreter - start executing {action name: "xforms:action"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -               interpreter - start executing {action name: "xforms:toggle"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                 start dispatching {name: "xforms-revalidate", target: "xf-2"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                   start performing default action {}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                     validation - start performing revalidate {model id: "xf-2"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "triggers-instance"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,471 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "parameters-instance"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       end dispatching {time (ms): "1"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "check-user-instance"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "main"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "temp"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "session"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,472 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "status-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       end dispatching {time (ms): "1"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "month-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "verification-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-valid", target: "modules-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         start performing default action {}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         end performing default action {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       end dispatching {time (ms): "0"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                       start dispatching {name: "xxforms-invalid", target: "teaching-load-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                         start handler {name: "xxforms-invalid", phase: "target", observer: "teaching-load-instance"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                           interpreter - start executing {action name: "xforms:action"}
2012-10-23 21:42:42,473 DEBUG XFormsServer  -                             interpreter - start executing {action name: "xforms:toggle"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                               start dispatching {name: "xforms-revalidate", target: "xf-2"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                 start performing default action {}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                   validation - start performing revalidate {model id: "xf-2"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "triggers-instance"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "parameters-instance"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "check-user-instance"}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,474 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     end dispatching {time (ms): "1"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "main"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "temp"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "session"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "status-instance"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,475 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "month-instance"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     end dispatching {time (ms): "1"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "verification-instance"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-valid", target: "modules-instance"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       start performing default action {}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       end performing default action {time (ms): "0"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     end dispatching {time (ms): "0"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                     start dispatching {name: "xxforms-invalid", target: "teaching-load-instance"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                       start handler {name: "xxforms-invalid", phase: "target", observer: "teaching-load-instance"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                         interpreter - start executing {action name: "xforms:action"}
2012-10-23 21:42:42,476 DEBUG XFormsServer  -                                           interpreter - start executing {action name: "xforms:toggle"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                             start dispatching {name: "xforms-revalidate", target: "xf-2"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                               start performing default action {}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                 validation - start performing revalidate {model id: "xf-2"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                   start dispatching {name: "xxforms-valid", target: "triggers-instance"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                     start performing default action {}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                     end performing default action {time (ms): "0"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                   end dispatching {time (ms): "0"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                   start dispatching {name: "xxforms-valid", target: "parameters-instance"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                     start performing default action {}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                     end performing default action {time (ms): "0"}
2012-10-23 21:42:42,477 DEBUG XFormsServer  -                                                   end dispatching {time (ms): "0"}

person hoichong    schedule 23.10.2012    source источник
comment
Та же проблема возникает и в Orbeon Forms 3.9.0 CE.   -  person hoichong    schedule 23.10.2012


Ответы (1)


Вы можете создавать бесконечные циклы в XForms, но в этом случае вы, похоже, столкнулись с ошибкой в ​​механизме XForms. xf:toggle не должно иметь никакого эффекта, если регистр не изменился. Я заполнил для этого проблему, которую вы можете отследить.

Эта проблема устранена, начиная с Orbeon Forms 4.0 M13. В более ранних версиях вы можете обойти это, добавив if к xf:toggle. Предполагая, что ваш идентификатор коммутатора my-switch:

<xforms:toggle if="xxforms:case('my-switch') != 'invalid-form-case'"
               case="invalid-form-case"/>

Плюс эквивалент if добавлен к другому <xforms:toggle case="valid-form-case"/>.

person avernet    schedule 24.10.2012
comment
Сейчас это исправлено, и это исправление будет в версии 4.0 M13. - person ebruchez; 25.10.2012
comment
Спасибо. Любые идеи, когда 4.0 M13 будет доступен для скачивания. - person hoichong; 30.10.2012
comment
Скорее всего, он будет вытеснен сегодня (30.10.2012). Когда он появится, об этом будет объявлено на нашем blog.orbeon.com и в Твиттере twitter.com/orbeon. - person avernet; 30.10.2012
comment
Спасибо. Мы протестировали M13 с нашими приложениями, и он действительно устранил бесконечный цикл — ревалидацию. - person hoichong; 02.11.2012