将模型传递给包含的JSP?

时间:2011-02-17 23:03:49

标签: java jsp spring-mvc

我有没有办法将我的模型传递给包含<script/>标记的JSP?

我正在尝试创建一些动态javascript,我需要该模型来访问具有我需要的一组属性的对象。我正在使用liferay自动包含jsp,而我正在使用弹簧控制器。

控制器:

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

${mykey}访问myview.jsp有效,但如何从包含的jsp中获取模型?

2 个答案:

答案 0 :(得分:4)

我相信该模型已经在请求对象中。您应该能够从包含的jsp访问它。如果这不起作用,您将需要将其存储为请求属性(您可能只能重用Spring MVC存储的那个)...然后将请求属性名称作为参数传递给包含的jsp:< / p>

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

在你包含的jsp中,将使用该名称来访问该模型: -

${param.model.mykey} 

答案 1 :(得分:4)

使用 <script> 标记包含的JSP?那么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中的模型相同,每当必要)。