Spring mvc 带有Spring提供的JS对象的Javascript文件

Spring mvc 带有Spring提供的JS对象的Javascript文件,spring-mvc,Spring Mvc,我需要加载一个使用Spring在服务器端生成的javascript文件。 目前,我正在这样做: 在html页面中: <script src="<spring:url value="/dyn/user.js"/>" type="text/javascript"></script> 这是user.jsp文件: window.User = { "id": ${id}, "name": "${name}" }; 无论如何,我需要来自用户对象的更多数

我需要加载一个使用Spring在服务器端生成的javascript文件。 目前,我正在这样做:

在html页面中:

<script src="<spring:url value="/dyn/user.js"/>" type="text/javascript"></script>
这是user.jsp文件:

window.User = {
    "id": ${id},
    "name": "${name}"
};
无论如何,我需要来自用户对象的更多数据。我想让斯普林替我做这项工作。最后,我想要的是:

window.User = <json object generated by Spring like when you use @ResponseBody in the controller>
{id: 2, username: "anto", firstName: "Antonio", lastName: "Tancredi", profile: Object}
window.User=

哪种方法更好?

如果只需要添加几个数据对象,那么我会继续添加新的模型属性。但是如果还有很多(超过5个),那么您可以尝试使用
地图

Map<String, Object> jsMap = new HashMap<String, Object>(); 
// populate Map here
model.addAttribute("jsMap", jsMap);
Map jsMap=newhashmap();
//在这里填充地图
addAttribute(“jsMap”,jsMap);
然后在jsp中:

window.User = {
    <c:forEach items="${jsMap}" var="entry" varStatus="status">
        "${entry.key}": "${entry.value}"${not status.last ? ',' : ''}
    </c:forEach>
};
window.User={
“${entry.key}”:“${entry.value}”${not status.last?',':''}”
};

您可能需要添加额外的类型检查,这样数值就不会被括在引号中,等等(这就是为什么我最初建议您使用原始方法的原因)

也可以在JSP页面中使用Jackson自动创建JS对象:

<%@page import="org.codehaus.jackson.map.ObjectMapper"%>
<%@page import="com.bla.woof.User "%>

<%
ObjectMapper mapper = new ObjectMapper();
User user = (User)request.getAttribute("user");
%>

window.User = <%= mapper.writeValueAsString(user) %>;
如您所见,“profile”成员也已转换为JS对象(这正是我想要的),因此您需要确保只转换您真正需要的内容。Jackson库中有一些注释可以帮助完成此任务

当您尝试转换惰性Hibernate对象时,请保持注意。Jackson将尝试自动检测对象属性,并将查找Hibernate惰性代理的成员。 您可以在此处找到一些详细信息:

例如,我的Profile类在用户对象中是惰性的。我需要添加此注释:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Profile implements Serializable {
:
}
告诉Jackson别理那两个成员

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Profile implements Serializable {
:
}