Spring MVC-JSTL标签JSON转换可以吗?


问题内容

伪控制器方法

@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";
}

假设客户使用表达式语言来呈现foobar; 但我们使用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的本质(控制器发送数据并由视图确定如何使用它)告诉我,这很好。有没有更好的方法来做同样的事情?有什么原因不能做到这一点?我可以使用一个单独的调用来请求JSON,但是随后我必须对页面加载进行更多请求,并且在页面加载时,可能需要根据其他输入在barOptionscontroller方法中确定逻辑getFoo()


问题答案:

乍一看,我不能说我看到任何明显的方法错误。最初使我措手不及的唯一方面是您需要将模型对象中的数据转换为json。

对我而言,JSON通常意味着需要转换某种服务器端对象,以便客户端javascript可以以javascript方式访问或操纵其结构。我猜想在不了解选项列表的更多用途的情况下,我看不到为什么需要json序列化的原因。

通过使用Tag将模型对象转换为JSON,我们避免了客户端提出的额外请求

但是,如果我们假设需要JSON(也许是某些第三方jquery插件),那么我绝对不会发现方法有什么问题。

barOptions无序列表有什么特别之处或不同之处,为什么它使用json呈现?为什么不仅仅使用for循环来构建列表项呢?或者,您可以使用一个自定义标签来完全构建ul。

除此之外,我还没有指出要点,因为人们可能会认为这是错误的代码。