微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

html – Grails:在gsp中显示创建的图像

我对Grails很新,所以这个问题可能是一个很简单的答案.我试图在gsp中显示动态创建的图像.图像不存储在数据库中,它在控制器中即时创建.

我本质上是一个gsp,它具有一组用户输入(requestGraph.gsp)的形式.在提交表单时,将参数发送到控制器中的displayGraph操作,该操作从完全在Grails之外的数据库查询信息,并使用JFreeChart库创建图表.我想在displayGraph.gsp或类似的东西中显示这个图像.

所以基本上在requestGraph.gsp我有一个类似于:

<g:form action="displayGraph">
    <!-- ... bunch of labels and Boxes -->
    <g:submitButton name="displayGraph" value="display Graph" />
</g:form>

在控制器内,我有一些像:

def requestGraph = {}

def displayGraph = {
    //... code that uses params  to make an image byte array and assigns to var img
    return [image : img]
}

displayGraph.gsp中

<body>
    <h1>Graph Title</h1>
    <!-- ??? How to dislpay image? -->
</body>

我试图将图像直接传输到displayGraph动作中的输出流.这是有效的,但是我失去了对displayGraph.gsp的所有页面格式的控制.

我发现大多数教程创建了一个专门的操作来将图像管道输出到蒸汽,然后使用标签调用该操作.问题是我的图像不存储在数据库中,我看不到传递图像字节数组(甚至表单参数)的方法来创建/渲染图像.有人可以帮我吗?谢谢.

解决方法

如果将字节写入输出流,则可以将控制器/操作视为GSP中图像的源.这是一个快速,未经测试的示例:
// controller action
def displayGraph = {
    def img // byte array
    //...
    response.setHeader('Content-length',img.length)
    response.contentType = 'image/png' // or the appropriate image content type
    response.outputStream << img
    response.outputStream.flush()
}

然后,您可以在src中的< img>标签如下:

<img src="${createLink(controller: 'myController',action: 'displayGraph')}"/>

更新:

再次阅读您的问题后,这可能会或可能不起作用 – 您可能会因为提交表单而将图形显示出来.这只有在将状态存储在服务器的某个地方(而不是从提交表单的请求中获取)才有效.如果您在服务器上存储足够的状态来生成图形,那么您必须为控制器提供一些附加参数以获取正确的图像,例如. src =“${g.link(controller:’myController’,action:’displayGraph’,params:[‘id’:1234])}”,其中id是如何检索图形状态.

原文地址:https://www.jb51.cc/html/229971.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐