在jsp文件的<script>
标记内,我有一些代码如下:
var chart = new myChart({'id': ${user.id}, 'type': ${user.type}, 'name': {user.name});
其中user
是服务器端设置的Spring模型属性。我的问题是通过每个不同的用户领域感觉笨重。如果我可以做这样的事情会很好:
var chart = new myChart('user': "${user}");
但是,当以这种方式完成时,${user}
的值将是一个如下所示的对象字符串:
User{id=1, type='admin', name='foo'}
我知道我可以将这个字符串解析为我的外部js中的一个对象,但感觉应该有一个更清晰的方法来做到这一点。谢谢你的帮助。
model.put("user", user);
String userJSON = MyJSONSerializer.serialize(user);
model.put("userJSON", userJSON);
然后在我的JSP中我可以做到:
var chart = new myChart({'user': JSON.parse('${userJSON}')});
这确实解决了我有一个混乱的选项对象的问题,但它带来了对同一个确切数据使用两个模型属性的问题。如果我可以为user
对象使用一个模型属性,然后可以以某种方式将其编码为JSON,那将是理想的。
答案 0 :(得分:1)
您可以使用Jackson之类的库将对象转换为JSON:
public static String objectAsJSON(Object obj) {
try
{
// This could be optimized by making a static ObjectMapper
return new ObjectMapper().writeValueAsString(obj);
}
catch (IOException e)
{
// Log exception and re-throw or return null
return null;
}
}
您可以在将对象放入模型之前调用此方法,并在JSP中引用String,如下所示:
var chart = ${jsonChart};
或者您可以编写自定义标记库并从那里调用objectAsJSON()
。然后,实际的myChart
对象可以进入您的模型一次。您的JSP可能如下所示:
var chart = <chartlib:toJson obj="${chart}" />;