2014-10-22 66 views
3

有什麼區別?我應該什麼時候比另一個更喜歡?Xpages bean vs對象數據

而與此相關的一些小問題:

  • ,如果我有對象數據,當saveObject叫什麼名字?

  • 它看起來像垃圾回收器回收我所有的多米諾骨牌手柄。我試圖貶低,然後克隆它,但它沒有幫助(它是如何知道它仍然是一個多米諾骨牌的對象?)。有沒有解決方法?

  • 如果我從xPages創建「var tmpVar = new package.TestClass()」,它會在更新時被回收。但是,如果我從bean創建java對象,它就停留在那裏。正確?

回答

4

我在純粹的託管豆與數據對象之間來回切換。我在一段時間內使用了很多數據對象,但後來遇到了JSF生命週期的一些問題,我認爲我無法工作。不確定是否涉及重複或自定義控件。所以我現在幾乎已經回去並且放棄了他們。

其他那個問題,我有我不知道有很多的差異。我認爲dataObject可能會有點混亂。既然你可以在XPage上設置它,但是你可以將它的範圍改變爲我認爲的會話或應用程序。但是如果你這樣做,那麼看起來更加混亂,很難找到然後在faces-config中製作bean。

我不確定你的問題的saveObject部分。

你絕對不想在bean或scoped變量中放置一個純粹的多米諾骨牌對象,因爲它們不是可序列化的,並且在某些時候會被垃圾收集器扔掉,這對你來說可能是最不方便的。

如果你只是做「var tmpVar = new package.TestClass()」,那麼是的,因爲變量的有限壽命,它會很快被殺死。如果你想以這種方式創建一個對象並將它保留更長時間,請將它放在一個真正的範圍中:viewScope.put(「myObject」,tmpVar);

我有一個視頻,我試圖給我的例子,我想4種方法來使用Java對象。在博客文章中,Tim Tripcony的一些非常好的評論可能會給你更多的信息。

http://www.notesin9.com/2013/08/01/notesin9-122-working-with-java-objects-in-xpages/

5

託管bean是完全相同的是,在運行時使用XPages管理。它們是在第一次打電話時創建的。雖然它們有一個空的構造函數,但faces-config中的managed-properties元素允許您定義值(並且我相信您可以將SSJS代碼添加到faces-config以計算值)。

對象數據源允許您處理什麼時候創建,這意味着它們的範圍可以小於viewScope - 面板或自定義控件。 saveObject方法由Save All Datasources事件調用。實際上,如果您正在編寫對象數據源,您將編寫一個按鈕並調用相關方法,而不是使用簡單的操作。

Java變量可以被回收,但Domino對象只能通過兩種方法回收。第一個是調用recycle()方法,第二個是在每個請求結束時,當會話被回收時。由於recycle()調用回收所有子元素,所有內容都會在請求結束時被回收。這就是爲什麼您不能將Domino對象存儲在作用域變量或其他任何持久對象(即bean)中的原因。請注意,諸如DateTimes,RichTextStyles等對象是會話的子對象,而不是像NotesItem或NotesRichTextItem那樣的更精細的Domino對象。

var tmpVar = new package.TestClass()只會在當前請求之外持續存在,如果您將tmpVar存儲在某處。如果您在crerateObject方法中使用該代碼,則return tmpVar會將TestClass的該實例傳遞到數據對象中。