2013-04-07 41 views

回答

8

根據提及,所有事件都需要一個表單:如果它們是全刷新的,那麼該頁面需要一個表單來發布以觸發重定向;如果它們是部分刷新,則表單將確定AJAX POST的內容。

XPages運行時包含對錶單組件的支持,但它不包含在組件調色板中(並且不能通過設計器首選項添加它),因此將其添加到頁面的唯一方法是編輯源XML直。例如:

<xp:form> 
    <xp:link id="exampleLink" text="Example Text"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
      <xp:this.action><![CDATA[#{javascript:// event code}]]></xp:this.action> 
     </xp:eventHandler> 
    </xp:link> 
</xp:form> 

有(至少)兩個原因,這部分是有用的:

  1. 它可以提高性能。如果頁面包含功能不同的不同區域 - 換句話說,頁面的一部分中的事件不需要知道頁面的任何其他部分中的數據 - 然後將每個部分以單獨的形式組件會導致每個事件只發布與觸發事件的組件相同的窗體中包含的數據。您的問題表明,當您將createForm設置爲false時,打破的鏈接應將用戶導航到另一個頁面;因此,很可能此事件不需要知道任何字段值,因爲用戶仍然會離開當前頁面。如果是這樣,請將此鏈接以自己的形式包裝起來,並將所有字段包裝在單獨的表單中,並且鏈接的執行速度要稍微快一些,因爲瀏覽器不必發佈任何字段數據......鏈接本身的標識符。
  2. 它可以提供風格的靈活性。開發人員通常會從實際的最終用戶需求中接收不熟悉Domino的設計者的預定CSS - 例如,如果網站設計是外包的,或者必須遵守企業風格指南。當設計師做出某些假設時,這往往成爲緊張的根源,乍看之下,它與Domino生成的標記不兼容。其中一個最常見的例子就是當網站包含搜索功能時,因爲大多數網頁開發者將有一種搜索形式和一個單獨的其他領域的兄弟形式。當設計人員或開發人員不得不修改樣式表時,這可能會增加項目的成本,而設計師已經開發了一個樣式表來說明圍繞所有內容的單個表單標籤。簡而言之,抑制默認的表單元素並在需要的地方明確指定表單組件,可以更容易地遵守外部施加的樣式指導。

所以有很多使用情況下,它實際上是最好的一個XPage使用一個或多個表單組件......只記得所有的數據和事件必須是一個形式裏面 - 默認的形式是否通常包圍所有內容或手動包含的表單組件 - 而且這些表單不能嵌套。您可以添加儘可能多的表單組件,但它們必須是兄弟姐妹。沒有任何表單可以包含其他表單

+0

謝謝蒂姆,非常詳細的解釋! – 2013-04-07 11:38:01

+0

我也在我的複雜樣本上測試了它 - 它的工作原理! – 2013-04-07 12:18:08

+0

我已經閱讀過有關'xp:form'的一些關於StackOverflow本身的內容,但直到現在才知道它的實用性。謝謝蒂姆! – Naveen 2013-04-08 12:23:38

3

是的,因爲你正在做HTTP POST請求,他們需要一個表單。

您可以將POST請求鏈接轉換爲GET請求鏈接,而不是被移除SSJS事件,並創建一個「基本」的鏈接,而不是:

<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link> 

但是如果你需要的SSJS邏輯,那麼你還需要有一個表格。

+0

好點,謝謝您的評論 – 2013-04-07 11:38:20