如何在没有url执行状态的grails webflow中创建链接?

时间:2012-07-27 15:29:49

标签: grails spring-webflow gsp

我想在我的网页流中显示一个来自我的域对象的图片。

域对象有一个包含图像的byte []数组。我的控制器中的“图像”方法将图像传送到浏览器。这很好。

在我的网络流程中,我这样做:

<img src="${createLink(controller:'shop', action:'image', id:shopInstance.id)}">

我可以在我的前端(浏览器中)看到图像,但每次点击“下一步”或在webflow中更改我的状态时都会重新加载,因为图像网址包含一个更改webflow中每个事件的参数。

创建的图片网址(上面的示例)如下所示:

http://localhost:8080/project/shop/image/2?execution=e2s5

我不希望执行参数传递到我的图像网址中。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我的猜测是这是一个错误。我使用的解决方法如下

${createLink(controller: 'controller', action: 'action').replaceAll(/\?.*$/, "")}

这将使用正则表达式删除执行参数。

答案 1 :(得分:1)

不确定为什么要获得该执行参数,但您可以尝试:<img src="${resource(dir: 'shop/image', file: shopInstance.id)}">并确保UrlMappings.groovy文件具有“ship / image”到适当控制器的映射。

答案 2 :(得分:1)

从Grails 2.0.4开始,查看ApplicationTagLib.groovy,您可以看到

if (request['flowExecutionKey']) {
    params."execution" = request['flowExecutionKey']
    urlAttrs.params = params
    if (attrs.controller == null && attrs.action == null && attrs.url == null && attrs.uri == null) {
        urlAttrs[LinkGenerator.ATTRIBUTE_ACTION] = GrailsWebRequest.lookup().actionName
    }
}

因此,Grails强制在webflow中呈现的每个链接都包含该执行参数。它看起来像我的错误。