2011-09-20 67 views
0

我已經制作了一個頁面,這個頁面被假定爲所有Orbeon應用程序的手工創建XFroms和Orbeon Builder的通用退出點(成功頁面)。該頁面非常簡單,因爲它只能顯示一個通用郵件,該郵件在提交後被重定向到頁面的表單中指定。這感覺像一個微不足道的任務,但我用它掙扎了很多。成功頁面上的實例數據

文檔說:

的「POST」的解決方案 如果你的XForms頁面響應包含XML的HTTP POST,那麼它可以用一個特殊的URL稱爲輸入訪問POST數據的內容:例如: < xforms:instance id =「user-data」src =「input:instance」/ > 這會導致用戶數據實例使用發佈到XForms頁面的XML數據填充。這很簡單! 注意:沒有什麼能阻止您將此方法與從請求或服務獲取數據結合使用。

我的頁面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> 

的三江源頁面會從測試頁面提交時加載,但對於「successPageText」設置的值不會顯示出來。

我已經測試了一個Java servlet,當從其他頁面/表單提交時,xml數據包含在中,但我無法確定如何在thankyou頁面上使用它。

回答

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()返回根元素,而不是文檔元素。
相關問題