伪 Controller 方法
@RequestMapping("/foo")
public String getFoo(Model model) {
model.add("foo", repo.findFoo());
model.add("bar", repo.findBar());
model.add("barOptions", repo.findBarOptions(bar));
return "fooView";
}
假设客户端使用表达式语言来呈现 foo
和 bar
;但我们使用 JavaScript 来呈现 barOptions
.
<html>
<script>
var options = <mytag:toJSON object="${barOptions}"/>;
$("#options").renderOptions( options );
</script>
<body>
<mytag:renderFoo foo="${foo}"/>
<mytag:renderBar foo="${bar}"/>
<ul id="options"></ul>
</body>
</html>
常见的惯例告诉我这是不好的。但是 MVC 的本质, Controller 发送数据, View 决定如何使用它,告诉我这是好的。有没有更好的方法来做同样的事情?有什么理由不经常这样做吗?我可以使用单独的调用来请求 JSON,但随后我必须为要加载的页面发出更多请求,并且可能有逻辑来确定 barOptions
在 Controller 方法中 getFoo()
基于页面加载时的其他输入。
最佳答案
乍一看,我不能说我发现这种方法有任何明显的错误。最初让我措手不及的唯一方面是您需要将模型对象中的数据转换为 json。
对我来说,JSON 通常意味着需要转换某种服务器端对象,以便客户端 javascript 可以以 javascript 方式访问或操作其结构。我想在不了解选项列表的更多用途的情况下,我看不出这里需要 json 序列化的原因。
By using a Tag to convert a model object to JSON, we avoid an additional request made by the client
但如果我们假设 JSON 是必需的(可能是某些第三方 jquery 插件),那么我绝对看不出这种方法有什么问题。
barOptions 无序列表有什么特别之处,为什么用json 渲染?为什么不直接使用 for 循环来构建列表项呢?或者,您可以拥有一个完全构建 ul 的自定义标签。
除此之外,我忽略了人们可能认为这是错误代码的观点。
关于javascript - Spring MVC - JSTL标签JSON转换可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6626595/