Groovy PageRenderer无法呈现GSP

时间:2017-04-04 06:44:59

标签: grails groovy service view

我有一个版本的Grails应用程序:2.2.4。我尝试将gsp呈现为字符串参数并将其发送到Mandrill模板以作为邮件发送。代码如下

import grails.gsp.PageRenderer

SampleService{
    PageRenderer groovyPageRenderer
    def mailService

    def sampleSendMail(List<String> names){
        def view = groovyPageRenderer.render(view: '/mail/_sampleMail', model: [names: names])
        mailService.sendMandrillTemplate(view)
    }
}

GSP如下所示

<%@ page contentType="text/html" %>
<table>
   <th>Name</th>
      <g:each in="${names}" var="name" >
          <tr>${name}</tr>
      </g:each>
</table>

当我在本地测试时,它按预期工作。但是当我在开发环境中测试它时,&#34;视图&#34;参数始终为空。

有具体原因吗?这个问题令我感到困惑,因为我无法想到这个问题的逻辑原因,因为它在我的本地机器上工作。这也不会在开发环境中执行时抛出任何错误消息,它只返回一个空字符串。

对此有任何见解都会有所帮助

EDIT -------

我正在使用Mandril插件(org.grails.plugins:mandrill:0.5)。我在&#34; sendMandrillTemplate&#34;中使用了Mandrill sendTemplate方法。方法。这不是问题。问题是当我在变量中渲染gsp时,它在我的开发环境中是空的。

1 个答案:

答案 0 :(得分:0)

实际上有一个关于类似问题的话题:https://github.com/grails/grails-views/issues/140

我们正在使用gsp模板来创建电子邮件内容,因此可能会有一个丑陋的骇客使其可在开发环境和产品环境中使用:

import java.nio.file.Paths
import org.grails.io.support.ClassPathResource
def notificationsPath = Paths.get(new ClassPathResource("notifications/_welcome.gsp").getURI()).toString()
def f = new File(notificationsPath)
def text = f.getText()


def user = User.findByUsername('email@example.com')
def properties = [url:"https://example.pl"]
def binding =  [user: user, properties: properties]

def engine = new groovy.text.SimpleTemplateEngine()
def template = engine.createTemplate(text).make(binding)