我有没有办法将我的模型传递给包含<script/>
标记的JSP?
我正在尝试创建一些动态javascript,我需要该模型来访问具有我需要的一组属性的对象。我正在使用liferay自动包含jsp,而我正在使用弹簧控制器。
控制器:
@RequestMapping
public String showForm( ModelMap model ){
model.addAttribute( "mykey", object );
return "myview";
}
从${mykey}
访问myview.jsp
有效,但如何从包含的jsp中获取模型?
答案 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
。
我不做Spring,但理论上你可以在script.jsp
上映射一些Spring控制器,以便它获得自己的模型(它可能与父JSP中的模型相同,每当必要)。