2012-07-27 55 views
1

我想在我的webflow中显示来自我的域对象的图像。如何在没有执行状态的url中在grails webflow中创建链接?

域对象有一个byte []数组来保存图像。我的控制器中的“图像”方法将图像传送给浏览器。这工作正常。

在我的Webflow我这样做:

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

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

所创建的图像URL(上面的例子)看起来是这样的:

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

我不希望这样的执行参数是传递到我的形象网址做。我怎样才能解决这个问题?

回答

1

不知道你为什么得到那个执行参数,但你可以试试:<img src="${resource(dir: 'shop/image', file: shopInstance.id)}">并确保UrlMappings.groovy文件有一个映射'ship/image'到适当的控制器。

+0

谢谢!这工作! – whitenexx 2012-07-29 12:01:51

+0

很高兴解决 – 2012-07-29 15:31:03

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内呈现的每一个环节,以包括执行PARAMS。它看起来像我的bug。

2

我的猜测是这是一个错误。我使用的工作如下

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

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