在我的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&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将这些网址设置为不同?如何解决?
答案 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也可以使用。通常,当链接到某处共享的网站时,此属性用于显示图像。因此服务可以正常处理和解码