2012-05-09 102 views
0

我有一個HashMap<Long, ClientProperties>,我在啓動時將ServletContext放在上面。如何訪問jsp/struts2中的servlet-context?

//During application-startup: 
//getProperties() returns HashMap<Long, ClientProperties> 
context.setAttribute("clientProps", clientManager.getProperties());  

ClientProperties是一個具有5個屬性的POJO,我需要在我的jsp中訪問它。 基本上我需要得到正確的POJO(通過HashMap-key)並在我的jsp中訪問它的屬性。

更多spesific(例如目的),該POJO的一個屬性是clientLogo 在我的jsp我現在有: <img src="<c:url value='/images/logo.png'/>" alt="Logo">

我需要更換路徑標識文件與的clientLogo屬性POJO。 要使用的HashMap鍵應該從存儲在會話中的用戶對象中提取。它可以這樣檢索:${sessionScope['user'].clientId}

任何想法? 如果有問題,使用struts2和btw。

回答

0

要從servlet上下文中獲取屬性foo,可以使用相同的語法來從會話中獲取它,但用applicationScope替換sessionScope。

但是,你有這麼多的嵌套的東西在這裏,你應該定義變量:

<c:set var="map" value="${applicationScope['clientProps']}"/> 
<c:set var="mapKey" value="${sessionScope['user'].clientId}"/> 
<c:set var="pojo" value="${map[mapKey]}"/> 
<c:set var="clientLogo" value="${pojo.clientLogo}"/> 

<c:url value="${clientLogo}"/> 

注意,這是典型的那種,你不應該在視圖中做艱苦的工作。用Java實現控制器中圖像路徑的檢索,並將其作爲動作/表單的屬性提供,並直接從視圖中訪問它。

+0

感謝您的回答。很有幫助!我在視圖中做這件事的原因是因爲這是由sitemesh裝飾的header.jsp。 header.jsp可以訪問struts-action-properties嗎? – user829237

+0

我不明白爲什麼它不能。但是我對Struts2並沒有多少經驗,也不知道你的應用程序是如何配置的。 –

相關問題