2011-02-17 66 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}