使用g:link和g.link时的结果不同

时间:2014-05-25 09:29:12

标签: grails gsp taglib grails-2.3

当我使用时

<g:link url="https://www.google.co.in">Google 1</g:link>

这给了我正确的结果,指向https://www.google.co.in的链接。

Google 1

但是当我使用

${g.link(url: "https://www.google.co.in") { 'Google 2' }}

这给了我

<a href="https://www.google.co.in">Google 2</a>

这是一个文字而非链接。

我已尝试encodeAsHTML()decodeHTML(),但结果相同。

我在这里做错了什么?如何获取链接而不是文字?

在我的配置文件中使用grails 2.3.7并拥有grails.views.default.codec = "html"

3 个答案:

答案 0 :(得分:3)

您可能在grails中看到了一个安全功能:“跨站点脚本(XSS)预防”

简而言之,尝试(未经测试):

${raw(g.link(url: "https://www.google.co.in") { 'Google 2' })}

有关详情,请参阅http://grails.org/doc/latest/guide/security.html#xssPrevention。所有这一部分都值得一读'因为有几种可用的配置选项。

答案 1 :(得分:2)

这些信息非常有用,它来自grails文档

http://grails.org/doc/2.3.1/guide/security.html

创建的每个标记库都有机会使用“defaultEncodeAs”属性指定用于编码标记库输出的默认编解码器:

static defaultEncodeAs = 'html'

也可以使用“encodeAsForTags”在每个标签上指定编码:

static encodeAsForTags = [tagName: 'raw']

答案 2 :(得分:1)

您在grails.views.default.codec='html'中设置Config.groovy,默认情况下会在应用中的所有${expressions}上转义HTML。

禁用gsp顶部的gsp set <%@page defaultCodec="none" %>的HTML编码。