2010-04-21 23 views
0

有這句話在JBoss EL resolver online documentation是否可以在EL中使用對象作爲函數參數和JBoss EL解析器?

完全理解此擴展EL是如何工作是很重要的。呈現頁面時,會存儲參數名稱(例如,hotel.id和user.username),並在頁面提交時評估(作爲值表達式)。您不能將對象作爲參數傳遞!

但我曾在我的項目中使用過對象作爲函數參數,然後我不小心讀了這個提示並且它工作正常!這怎麼可能?我怕,有一些神奇的現在......

編輯:請注意,我其實是使用全值得對象作爲參數,而我們的架構堆棧中的任何問題(MyFaces的,Facelets的,特立尼達和多巴哥, Spring,Webflow),我問這怎麼可能。例如,我可以在xhtml模板中執行此操作:「#{pageBean.formatAccount(account)}」,其中account是非常複雜的類。我知道根據文件它不應該是可能的,但它是。我是否應該在未來擔心一些困難?這就是問題所在。

回答

1

它允許在Seam framework.JSF單獨不允許它。這是使用Seam的優勢之一。你可以傳遞對象作爲參數。

2

它意味着在那裏說「非標準」的對象。即不是String,Integer等,而是諸如Javabeans等充分價值的對象。


更新:我現在看到的文檔的意思。這意味着這些值是實際上不是作爲複雜的對象傳遞的,而是像表示值表達式的普通的香草串一樣。從字面上看,"bean.hotel","bean.user.address"等等。當頁面被提交時,這些字符串被評估爲值表達式,並且與它關聯的複雜對象將從JSF內存中檢索。

這裏重要的是,你需要保持相同複雜的對象形式的後續請求提交因爲它是在形式的初始顯示。如果bean是請求作用域,那麼在響應完成時原始對象將會丟失。您希望在隨後的請求期間在bean的構造函數中再次構造完全相同的複雜對象。解決這個「問題」的另一種方法是將bean放在更廣的範圍內,如會話範圍或Seam對話範圍或JSF 2.0視圖範圍。

這也是什麼文件的下一句話要告訴:

您必須確保參數不僅可在頁面呈現,而且當它被提交。如果在提交頁面時無法解析參數,則將使用空參數調用操作方法!

+0

你打算說它在哪裏?我不明白... – 2010-08-11 15:31:24

+0

我沒有說「我」,我說「它」,指的是JBoss文檔。 – BalusC 2010-08-11 15:37:02

+0

對不起,我忽略了「t」:)。但是我編輯了我的問題,清楚地表明我已經在使用完整的物品,並且我問它怎麼可能。 – 2010-08-12 06:05:05