2010-02-23 33 views
4

爲JSP表達式語言定義函數時,是否有一種方法可以指定函數需要某個隱式對象(如pageContext)?從JSP EL函數訪問隱式對象

我要定義一個函數${my:href('a.jpg')}

public static String href(String fileName, PageContext pageContext) 

來實現,但我不希望有pageContext的我每次調用它明確地傳遞給函數。

回答

1

這將是很好,但不是,沒有辦法直接做到這一點。此外,由於JSP EL功能必須是public static,因此沒有解決方法。所以,解決的辦法就是回到普通的舊JSP代碼:

<% Helper my= new Helper (pageContext); %> 

Helper有一個文件名作爲參數正常的公共方法:

public String href (String fileName) { ... } 

後來

... ${my.href(...)} 
+0

沒有辦法直接做到這一點,但絕對有可能做到這一點,我在Java Web應用程序中廣泛使用它。 – Pointy 2010-02-23 15:43:48

+0

scriptlet?真? -1 – Yevgeniy 2014-03-08 16:27:06

2

你只有當您提供將它們(通過過濾器或其他)存儲爲線程局部變量時纔可以訪問「隱式」對象。然後,您可以編寫一些實用程序類,以便從任何情況下合理地獲取它們。一些框架(例如Stripes)(yaay Stripes!)使得它相對容易。

+0

所以你把信息對象放在一些上下文中(這可能在某處使用哈希映射)。這可以很容易地從任何地方找到信息對象,但速度很慢。我的解決方案速度更快但不夠靈活。 – 2010-02-23 16:08:32

+1

這並不慢,你不需要把它們放在散列圖中。 (好吧,不是一個明確的哈希映射,或者一個可見的哈希映射;這都是ThreadLocal實現的問題。)您可以使用單獨的ThreadLocal變量來存儲不同的上下文對象,並通過實用類訪問它們(單例或靜態訪問函數)。 Strips可以讓你保持一個單一的通用上下文對象,從中你可以得到任何你可能需要的東西。 – Pointy 2010-02-23 19:07:26