簡體   English   中英

使用JBoss EL解析器可以在EL中將對象用作函數參數嗎?

[英]Is it possible to use objects as function paremeters in EL with JBoss EL resolver?

JBoss EL解析器在線文檔中有這句話:

充分理解EL的擴展原理是很重要的。 呈現頁面時,將存儲參數名稱(例如hotel.id和user.username),並在提交頁面時對其進行評估(作為值表達式)。 您不能將對象作為參數傳遞!

但是在我不小心閱讀此提示並使其起作用之前,我已在項目中將對象用作函數參數! 這怎么可能? 恐怕現在有些魔法了...

編輯:請注意,我實際上使用了完全有價值的對象作為參數,而我們的框架堆棧(MyFaces,Facelets,Trinidad,Spring,Webflow)沒有任何問題,我在問這怎么可能。 例如,我可以在xhtml模板中執行此操作:“#{pageBean.formatAccount(account)}”,其中account是非常復雜的類。 我知道根據文檔,這是不可能的,但是確實可以。 將來我應該擔心一些困難嗎? 這就是問題所在。

它的意思是在那里說“非標准”對象。 即不是StringInteger等,而是像Javabeans這樣的完全有價值的對象。


更新 :現在,我了解文檔的含義。 意思是說這些值實際上不是作為復雜的對象傳遞的,而是作為表示值表達式的普通香草字符串傳遞的。 字面上是"bean.hotel""bean.user.address"等。提交頁面時,這些字符串將作為值表達式進行求值,並且將從JSF內存中檢索與之關聯的復雜對象。

此處的重要性在於,您需要在表單提交的后續請求中保留 表單初始顯示中相同的復雜對象。 如果bean是請求范圍的,則響應完成后,原始對象即會丟失。 您希望在后續請求期間再次在Bean的構造函數中構造完全相同的復雜對象。 解決此“問題”的另一種方法是將bean放在更廣泛的范圍內,例如會話范圍或Seam對話范圍或JSF 2.0視圖范圍。

這也是文檔的下一句話試圖告訴的內容:

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

在Seam框架中允許使用。僅JSF不允許使用。這是使用Seam的優點之一。 您可以將對象作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM