1

当我使用

<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"

4

3 回答 3

3

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

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

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

有关更多信息,请参阅http://grails.org/doc/latest/guide/security.html#xssPrevention。该部分的所有内容都值得一读,因为有几个可用的配置选项。

于 2014-05-25T11:20:03.817 回答
2

此信息可能很有用,它来自 grails 文档

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

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

static defaultEncodeAs = 'html'

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

static encodeAsForTags = [tagName: 'raw']
于 2014-05-25T13:25:12.577 回答
1

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

要为 gsp 设置<%@page defaultCodec="none" %>在 gsp 顶部禁用 HTML 编码。

于 2014-05-25T10:15:41.893 回答