2011-02-17 103 views
2

有沒有辦法讓我的模型通過一個包含<script/>標籤的JSP?將模型傳遞給包含的JSP?

我正在嘗試創建一些動態JavaScript,並且我需要該模型來訪問具有我需要的一組屬性的對象。我使用liferay來自動包含jsp,並且我使用了一個彈簧控制器。

控制器:

@RequestMapping 
public String showForm(ModelMap model){ 
model.addAttribute("mykey", object); 
return "myview"; 
} 

訪問${mykey}myview.jsp的作品,但我怎麼在模型得到一個包含的JSP?

回答

4

一個JSP,你有一個<script>標籤?這樣JSP代表一個動態填充的text/javascript響應?不,這當然不可能。它被完全加載單獨的 HTTP請求將不包含與返回父HTML頁面的請求相同的屬性。這不會與使用<jsp:include>的服務器端包括髮生在相同的 HTTP請求內發生混淆。

除了把它放在會話範圍內(它可以有比你想要的更多的警告),最好你可以做的就是將必要的數據作爲全局JS變量來打印。

<script>var foo = '${model.foo}';</script> 
<script src="script.jsp"></script> 

這樣你就可以在script.jsp裏面通過JS方式訪問它。

我不會做Spring,但理論上你可以在script.jsp上映射一些Spring控制器,這樣它就可以獲得自己的模型(只要需要,它可以與父JSP中的模型相同)。

+0

嗯。這個腳本真的有意義,可以擁有自己的模型/控制器。再說一遍,也許我可以在原始JSP中編寫它。 – 2011-02-18 01:06:36

4

我相信模型已經在請求對象中了。你應該可以從你包含的jsp中訪問它。如果這不起作用,你將需要將它作爲一個請求屬性存儲(你可能只能重用Spring MVC存儲的屬性),然後將請求屬性名稱作爲參數傳遞給包含的jsp:

<c:set var="myRequestModel" value="${model}" scope="request" /> 
<jsp:include ... > 
    <jsp:param name="model" value="myRequestModel"/> 
</jsp:include> 

在你包含的JSP將使用該名稱訪問模式: -

${param.model.mykey}