繁体   English   中英

在GSP中将数据从控制器传递到JavaScript

[英]Passing data from controller to JavaScript in GSP

我希望直接在视图中通过嵌入数据将数据从控制器传递到javascript。 (因此不会有额外的请求。)

我的第一个解决方案是在GSP中使用as JSON ,如下所示:

<script>
  var data = ${invoice as JSON};
</script>

我不认为这是个好主意,因为我必须使用(Grails 2.2)

grails.views.default.codec = "none"

或(Grails 2.3)

grails {
  views {
    gsp {
      codecs {
        expression = 'none'
      }
    }
  }
}

现在,我发现我可以像这样创建一个小的taglib:

def json = { attrs, body ->
  out << (attrs.model as JSON)
}

我可以在GSP中使用以下代码:

<script>
  var data = <g:json model="${invoice}" />;
</script>

现在,问题。 使用taglib是最佳做法吗? 如果没有,请给我最好的解决方案。

在回答中转换评论。 您可以在控制器中创建JSON字符串并将其传递给视图。 Grails 2.3.x具有不对您的内容进行编码的原始编解码器。 关于这方面更多的信息编解码器在这里

例:

class MyController {
  def index() {
    String invoiceString = invoice as JSON
    [json: invoiceString]
  }
}

index.gsp中

<script>
  var data = ${raw(json)};
</script>

使用Grails 2.4.4。

以上答案对我没有用。

添加对我有用的东西。

资料来源: http//aruizca.com/how-to-render-json-properly-without-escaping-quotes-inside-a-gsp-script-tag/

<g:applyCodec encodeAs="none">
    var data = ${data};
</g:applyCodec>

现在,我正在升级到Grails 3.2.4。 我发现塞尔吉奥·米歇尔斯的方法仍然有用。 只需确保jsonString是一个String对象。

<script>
  var data = ${raw(jsonString)};
</script>

如果它不是String对象,则可以使用类似下面的代码。

<script>
  var data = ${raw(mapInstance.encodeAsJSON().toString)};
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM