gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 12:31:30 25 4
gpt4 key购买 nike

我是 Grails 的新手,所以这个问题的答案可能非常简单。我正在尝试在 gsp 中显示动态创建的图像。图像未存储在数据库中,它是在 Controller 中即时创建的。

我基本上拥有的是一个 gsp,它具有一种接受一组用户输入的形式 (requestGraph.gsp)。提交表单后,参数将发送到 Controller 中的 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>

在 Controller 中我有类似的东西:

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 中所有页面格式的控制。

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

最佳答案

如果将字节写入输出流,则可以将 Controller /操作视为 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')}"/>

更新:

再次阅读您的问题后,这可能有效也可能无效 - 看起来您可能将图表显示为表单提交的结果。这仅在您将状态存储在服务器某处时才有效(而不是仅从提交表单的一个请求中获取状态)。如果您确实在服务器上存储了足够的状态来生成图形,那么您必须向 Controller 提供一些额外的参数以获得正确的图像,例如src="${g.link(controller: 'myController', action: 'displayGraph', params: ['id': 1234])}" ,其中 id 是您检索图形状态的方式。

关于html - Grails:在 gsp 中显示创建的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com