2009-08-26 43 views
42

在Grails中(< 2.3),如果我將grails.views.default.code='none'保留在grails Config.groovy中,這取決於我對HTML表達式進行明確的編碼GSP文件:${myValue?.encodeAsHTML()}覆蓋grails.views.default.codec ='html'config回到'none'

如果我在Config.groovy中設置了grails.views.default.codec='html",那麼每個表達式都會自動發生HTML編碼:${myValue}

我的問題:如果我將默認值設置爲'html',那麼當我不需要HTML編碼行爲時,如何返回'none'一個表達式?

回答

6

如果默認編碼級別設置使用的HTML

grails.views.default。編解碼器= 「HTML」

然後在頁面刪除HTML編碼爲一個表達式,你可以使用

$ {原料(表達)}

+0

僅適用於Grails > = 2.3請參閱http://mrhaki.blogspot.fr/2013/11/grails-goodness-generating-raw-output.html。這個問題的目標是Grails <2.3。請參閱下面的John Flinchbaugh答案。 – BenC 2017-12-14 14:48:44

1

我可能有一個解決方案。雖然我不確定它是如何被接受的。

我可以將表達式的默認編解碼器設置爲HTML,但在GSP中使用<%= myValue%>符號而不是$ {}表達式將非轉義值傳送到頁面上。

+0

你說多這在你的其他答案。這一個不添加任何東西。 – cdeszaq 2013-07-26 22:13:01

+0

@cdeszaq看看日期。更完整的答案是後來的。 (他們都是從2009年開始的(你的評論是在我的一年之前)。):| – 2014-08-21 18:49:46

+0

@CharlesWood我的觀點是,應該刪除這個低級答案。我沒有更明確地表示道歉。 – cdeszaq 2014-08-22 17:08:04

4

GRAILS-1827,它看起來像你可以用

<%@ defaultCodec="HTML" %> 

<%@page defaultCodec="HTML" %> 
在一些版本

(見引用的問題)覆蓋某個特定頁面的默認編碼解碼器。

+0

這對每個頁面覆蓋看起來都不錯。 – 2009-11-18 11:51:44

62

總結在該編解碼器可應用於各種級別:

設置Config.groovy中的grails.views.default.codec='html'獲得HTML的應用程序中所有${expressions}逃逸默認。

然後,當你想預設一整頁回無,使用指令:

<%@page defaultCodec="none" %> 

<%@ defaultCodec="none" %> 

要以其它方式默認頁面的一個表達禁用HTML編碼到HTML,使用<%=expression%>符號而不是${...}

+0

使用頁面指令是好的。 – 2014-02-26 05:31:34

+9

此解決方案不再有效。相反,您需要使用'raw'方法:'$ {raw(expression)}' – 2014-03-31 20:45:33

+0

我必須用新的Grails重新訪問這個。他們可能使它更容易。 – 2014-05-02 15:49:25

1

寫自己的標籤,記的表達直接輸出流:

class YourTagLib { 

    static namespace = "x" 

    def unescaped = { attrs, body -> 
     out << attrs.value 
    } 

} 

用它在你的GSP:

<x:unescaped value="${yourexpression}"/> 
7

嘗試使用$ {原料(myvalue的)},你做不需要聲明頁面編解碼器等