成功页面上的实例数据

时间:2011-09-20 10:25:27

标签: orbeon

我创建了一个页面,假设它是所有Orbeon应用程序的通用出口点(成功页面),这些应用程序都是手动创建XFrom和Orbeon Builder。该页面非常简单,因为它只应显示在提交后重定向到页面的表单中指定的通用消息。这感觉就像一项微不足道的任务,但我一直在努力。

文档说:

“POST”解决方案 如果您的XForms页面响应包含XML的HTTP POST,那么它可以使用名为input:instance的特殊URL访问POST数据的内容: < xforms:instance id =“user-data”src =“input:instance”/> 这导致用户数据实例填充了发布到XForms页面的XML数据。它就这么简单! 注意:没有什么可以阻止您将此方法与从请求或服务中获取数据相结合。

我的page-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>

thankyou.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>

从测试页面提交时会加载thankyou页面,但不会显示为'successPageText'设置的值。

我已经使用Java servlet测试过,当从其他页面/表单提交时,xml数据包含在帖子中,但我无法确定如何在thankyou页面上使用它。< / p>

1 个答案:

答案 0 :(得分:0)

您的示例不起作用的主要原因是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()返回根元素,而不是文档元素。