2010-10-05 25 views
0

我試圖將以下scriptlet代碼轉換爲EL。我嘗試了以下(下面),但不能得到它的工作。的getValue()是關閉ConfigFactory的方法,該方法返回一個字符串:如何獲取對象並調用JSP中的jstl EL中的方法

在一個傾聽者,我設置了configFactory爲event.getServletContext().setAttribute("ConfigFactory", new ConfigFactory());

在我的小腳本代碼中有:(它工作正常)

<% 
    ConfigFactory cf = (ConfigFactory) application.getAttribute("ConfigFactory"); 
%> 
Value from scriptlet= <%=cf.getValue()%> <br/> 

EL帶給我的麻煩:

<c:set var="cf" value="${initParam['ConfigFactory']}"/> 
<c:out value="${cf.getValue}"/> <!-- try # 1 --> 
<c:out value="${cf.value}"/>  <!-- try # 2 --> 
+0

'$ {cf.value}'_should_ work。當你嘗試時會發生什麼? – 2010-10-05 04:22:14

回答

1

此行

<c:set var="cf" value="${initParam['ConfigFactory']}"/> 

做基本相同

pageContext.setAttribute("cf", application.getInitParameter("ConfigFactory")); 

你不希望這樣。擺脫那條線。在EL中,您可以通過其名稱隱式直接訪問所有請求,會話和應用程序屬性。下面

${ConfigFactory} 

確實基本相同

out.print(pageContext.findAttribute("ConfigFactory")); 

分別PageContext#getAttribute()HttpServletRequest#getAttribute()HttpSession#getAttribute()最後ServletContext#getAttribute()直到第一非空值被發現的PageContext#findAttribute()測試。這更多是你想要的。

你終於可以訪問getValue()方法就可以了平常EL方式:

${ConfigFactory.value} 

不相關的問題,但你通常會給實例標識符開始用小寫的名稱。你也不會做ConfigFactory ConfigFactory = new ConfigFactory();,對吧? :)

0

未測試:

${applicationScope.ConfigFactory.value} 
相關問題