Данные экземпляра на странице успеха - PullRequest
0 голосов
/ 20 сентября 2011

Я создал страницу, которая должна быть общей точкой выхода (страница успеха) для всех приложений Orbeon, созданных как вручную при создании XFroms, так и Orbeon Builder.Страница действительно проста, так как предполагается, что она показывает только общее сообщение, указанное в форме, которая перенаправляется на страницу после отправки.Это похоже на тривиальную задачу, но я много с ней боролся.

Документация гласит:

Решение "POST", если ваша страница XForms отвечает на HTTP POST, содержащийXML, тогда он может получить доступ к содержимому данных POST с помощью специального URL-адреса, называемого input: instance:Это приводит к тому, что экземпляр пользовательских данных заполняется данными XML, размещенными на странице XForms.Это так просто!ПРИМЕЧАНИЕ. Ничто не мешает вам комбинировать этот метод с получением данных из запроса или службы.

Моя страница-flow.xml


    <config xmlns="http://www.orbeon.com/oxf/controller"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:oxf="http://www.orbeon.com/oxf/processors">

        <page id="main" path-info="/thankyou/" view="thankyou.xhtml"/>
        <page id="test" path-info="/thankyou/test" view="test.xhtml">
            <action when="/form/fromPage = 'test'">
                <result page="main"/>
            </action>
        </page>

        <epilogue url="oxf:/config/epilogue.xpl"/>
    </config>

Спасибо.xhtml


    <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
      xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xxforms="http://orbeon.org/oxf/xml/xforms">
    <xhtml:head>
      <xhtml:title>Thank you</xhtml:title>
      <xforms:model xmlns:xforms="http://www.w3.org/2002/xforms">
      <xforms:instance id="form-instance" src="input:instance"/>

      <xforms:bind id="form-binds" nodeset="instance('form-instance')">
        <xforms:bind id="success-bind" ref="/form/success/successPageText"/>
      </xforms:bind>
      </xforms:model>
    </xhtml:head>
    <xhtml:body>
      <xhtml:p>
        <xhtml:output ref="instance('form-instance')/form/success/successPageText"/>
      </xhtml:p>
      <xhtml:p>
        <xhtml:output bind="success-bind"/>
      </xhtml:p>
      <xhtml:p>
        <xhtml:a href="http://www.google.com">Away from here</xhtml:a>
      </xhtml:p>
    </xhtml:body>
    </xhtml:html>

test.xhtml


    <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
      xmlns:xxforms="http://orbeon.org/oxf/xml/xforms">

      <xhtml:head>
        <xhtml:title>Thankyou page test</xhtml:title>
        <xforms:model id="form-model">
          <xforms:instance id="form-instance">
            <form>
              <input>text here</input>
              <fromPage>test</fromPage>
              <success>
                <successPageText>
                  This is a test.
                </successPageText>
              </success>
            </form>
          </xforms:instance>

          <xforms:bind id="form-binds" nodeset="instance('form-instance')">
            <xforms:bind id="input-bind" ref="/form/input" type="xs:string" required="true()"/>
          </xforms:bind>

          <xforms:submission id="main-submission" method="post" action="/thankyou/test"
            ref="instance('form-instance')" validate="false" replace="all"/> 
        </xforms:model>
      </xhtml:head>

      <xhtml:body>
        <xhtml:table>
          <xhtml:tr>
            <xhtml:td>
              <xforms:input bind="input-bind" id="input-control">
                <xforms:label>Type something here </xforms:label>
              </xforms:input>
            </xhtml:td>
          </xhtml:tr>
          <xhtml:tr>
            <xhtml:td>
              <xforms:submit submission="main-submission" id="submit-control">
                <xforms:label>Test</xforms:label>
                <xforms:setvalue ev:event="DOMActivate">submit</xforms:setvalue>
              </xforms:submit>
            </xhtml:td>
          </xhtml:tr>
        </xhtml:table>
      </xhtml:body>
    </xhtml:html>

Страница спасибо загружается при отправке с тестовой страницы, но значениенабор для 'successPageText' не отображается.

Я протестировал с сервлетом Java, что при отправке с других страниц / форм данные xml включаются в сообщение , но я не могучтобы понять, как использовать его на странице спасибо.

1 Ответ

0 голосов
/ 21 сентября 2011

Основная причина, по которой ваш пример не работает, в том, что в test.xhtml вы публикуете сообщения для себя. Вместо этого вы должны опубликовать на целевой странице. Поэтому напишите представление как:

<xforms:submission id="main-submission" method="post" 
    action="/20110920-so-thankyou/"
    ref="instance('form-instance')" validate="false" replace="all"/>

Шаблон публикации себе и последующего определения в page-flow.xml того, какой должна быть следующая страница, считается устаревшим. Это все еще работает, все еще есть ситуации, в которых это имеет смысл, но в большинстве случаев стоимость дополнительной сложности выше, чем выгоды, которые вы получаете от этого разделения.

Наконец, пара вещей, очень специфичных для вашего примера:

  • В thankyou.xhtml вы использовали <xhtml:output>, который вы хотите изменить на <xforms:output>.
  • Выражение XPath в первом выводе должно быть instance('form-instance')/success/successPageText без form. Помните: instance() возвращает корневой элемент, а не элемент документа.
...