正确解码Grails URL params?

时间:2013-07-01 17:18:49

标签: grails grails-2.0 grails-controller

在我的GSP中,我有类似的东西:

<head>
  <meta property="og:image"
    content="${createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true)}" />

</head>

当我查看生成的代码时,我发现:

<meta property="og:image"
    content="http://www.myurl.com/main/getImage/faf878ef93996f26c1?width=115&amp;height=200" />

问题在于内部有一些 amp; 值。

在我的控制器中:

params看起来像这样:

[width:115, amp;height:200, id:faf878ef93996f26c1, action:getImage, controller:main]

问题是params.height不再工作,因为有放大器;再次。

如何正确解码此网址?有没有办法让Grails不放置放大器;在网址里面?

当我在GSP机构中执行以下操作时:

<body>
  ${createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true)}"
</body>

我得到了正确的网址:

http://www.myurl.com/main/getImage/faf878ef93996f26c1?width=115&height=200

为什么Grails将这些网址设置为不同?如何解决?

3 个答案:

答案 0 :(得分:1)

问题是您将链接呈现为gsp中的字符串,因此grails会在打印之前对其进行编码。您甚至不需要链接,只需尝试

“$ {m&amp; m}”你会看到grails将其表示为m&amp; amp; m

一种解决方案是使用直接渲染,我相信它会绕过grails中的附加编码

<% out << '<meta property="og:image" content="' + createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true) + '" />' %>

答案 1 :(得分:1)

您也可以关闭该特定网页的默认编码。

将以下内容放在gsp页面的顶部

<%@page defaultCodec="none" %>

答案 2 :(得分:1)

我不知道这个问题仍然存在,但是有人可能会坚持这个问题。因此,解决方案是将链接生成的代码包装到raw()函数中:

<meta property="og:image"
content="${raw(createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true))}" />

但是,编码的url也可以使用。通常,当链接到某处共享的网站时,此属性用于显示图像。因此服务可以正常处理和解码