将Spring模型变量从JSP模板传递给javascript

时间:2014-07-14 15:05:58

标签: javascript spring jsp

在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中的一个对象,但感觉应该有一个更清晰的方法来做到这一点。谢谢你的帮助。

编辑:关于Cameron在下面的回答,我可以将其添加到我的服务器端控制器代码中:

model.put("user", user);  
String userJSON = MyJSONSerializer.serialize(user);  
model.put("userJSON", userJSON);

然后在我的JSP中我可以做到:

var chart = new myChart({'user': JSON.parse('${userJSON}')});

这确实解决了我有一个混乱的选项对象的问题,但它带来了对同一个确切数据使用两个模型属性的问题。如果我可以为user对象使用一个模型属性,然后可以以某种方式将其编码为JSON,那将是理想的。

1 个答案:

答案 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}" />;