我创建了一个页面,假设它是所有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>
答案 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>
。instance('form-instance')/success/successPageText
,而不是form
。请记住:instance()
返回根元素,而不是文档元素。