2010-07-02 58 views
1

在grails中,我使用GSP模板来呈现通过邮件插件发送的HTML电子邮件。这工作得很好,但是GSP模板使用了一个param,它依次从我的messages.properties文件中获取。现在我想使用HTML,例如<br/>内的messages.properties,但它在邮件中显示为文本和标记不解释。如何在grails messages.properties中使用HTML发送邮件

我已经尝试在GSP中的参数上使用.decodeHTML(),但它不起作用。

我在哪里必须进行编码/解码,或者根本不可能在messages.properties中使用HTML标记?

<%@ page contentType="text/html"%> 
<html> 
<body> 
${variableWithHTMLTextFromMessagesProperties} 
</body> 
</html> 
+0

你能后的GSP?您是否在GSP模板中的消息标记中使用了encodeAs属性? – proflux 2010-07-02 13:44:58

+0

刚刚添加了这个例子。 – 2010-07-03 08:23:45

回答

2

找到解决方案here。最简单的方法是使用<%=variableWithHTMLTextFromMessagesProperties%>而不是${variableWithHTMLTextFromMessagesProperties}。这会停止HTML转义。

0

docs

<g:encodeAs codec="HTML"> 
    Profile for user ${user.name} is: 
    <g:render template="/fragments/showprofile"/> 
</g:encodeAs> 
+1

这在错误的方向工作;现在messages.properties中的
显示为< br/> – 2010-07-03 08:20:52

3

你能不能做使用信息标签,类似于以下的GSP定位?控制器 -

sendMail { 
    to "[email protected]" 
    subject "cheese" 
    html g.render(template:"myTemplate") 
} 

,然后在_myTemplate.gsp -

<%@ page contentType="text/html" %> 
<html><head></head> 
<body> 
    <p>test: <g:message code="a.test"/></p> 
</body> 
</html> 

然后在messages.properties -

a.test=this <br/><br/> is a test 

这样工作正常,我(的Grails 1.3.1,邮件0.9),我收到了2封邮件。任何你不能这样做的理由?

+0

实际上,在我的情况下,messages.properties中的文本事先被保存为持久化类中的字符串,然后将其传递给视图。当然,我理论上可以存储消息代码,但是之后我还需要存储稍后应该使用的参数,所以我宁愿直接存储消息...但我想我会如果您的解决方案无法以其他方式工作,请将您的解决方案作为后备解决方案,谢谢! – 2010-07-08 06:28:39

2

我用自定义taglib做了我自己的解决方案。

def htmlMessage = { attrs, body -> 
    out << g.message(attrs, body).decodeHTML() 
} 

然后定义一个消息时,它必须与转义HTML:

my.html.message={0,choice,0#There is no elements|1#There is &lt;strong&gt;1&lt;/strong&gt; element|1<There are &lt;strong&gt;{0}&lt;/strong&gt; elements} 

针对HTML只是:

<g:htmlMessage code="my.html.message" args="[qElements]" /> 

结果是在强与数产生的I18N HTML字体。就像这样:

“有元素”