Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Spring模型变量从JSP模板传递到javascript_Javascript_Spring_Jsp - Fatal编程技术网

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

将Spring模型变量从JSP模板传递到javascript,javascript,spring,jsp,Javascript,Spring,Jsp,在jsp文件的标记中,我有一些代码如下所示: var chart = new myChart({'id': ${user.id}, 'type': ${user.type}, 'name': {user.name}); var chart = ${jsonChart}; 其中,user是在服务器端设置的Spring模型属性。我的问题是,通过每个不同领域的用户都会感到笨拙。如果我能做这样的事情就好了: var chart = new myChart('user': "${user}"); 但

在jsp文件的
标记中,我有一些代码如下所示:

var chart = new myChart({'id': ${user.id}, 'type': ${user.type}, 'name': {user.name});
var chart = ${jsonChart};
其中,
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}')});

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

您可以使用如下库将对象转换为JSON:

您可以在将对象放入模型之前调用此方法,并在JSP中引用字符串,如下所示:

var chart = new myChart({'id': ${user.id}, 'type': ${user.type}, 'name': {user.name});
var chart = ${jsonChart};
或者您可以编写一个自定义标记库,并从中调用
objectAsJSON()
。然后实际的
myChart
对象可以进入您的模型一次。您的JSP可能如下所示:

var chart = <chartlib:toJson obj="${chart}" />;
var图表=;

这会起作用,但不像我希望的那么干净。我需要用户模型对象来呈现我的jsp。因此,在我的模型中,我将同时拥有一个user和一个userJson属性。对于具有不同结构的相同数据使用两个不同的模型属性似乎有点难闻。这是可以理解的。我已经编辑了我的答案,建议使用自定义标记库,这将允许您在模型中只保留对象的一个版本。