grails 渲染器“Servlet 上下文不能为空”

问题描述

我正在手动调用 grails 渲染器,因为我想生成一些 html,并将其存储在数据库中....

class ContractController {
    PageRenderer groovyPageRenderer

    def drawUp2(Contract contract) {
        contract.contractTerms = groovyPageRenderer.render(template: '/contract/contractTerms',model: [booking: booking,contract: contract])
        if (contract.validate()) {
            render view: 'drawUp2',contract: contract]
        } else {
            render view: 'drawUp',contract: contract]
        }
    }
}

这一切都很顺利,直到我改变了一些东西,使得我的模板中的某些东西开始创建域对象作为计算的一部分。它们只是暂时的域对象,因为我没有保存它们。在这段代码中,我知道它有效,因为当我正常调用它时,它工作正常,事情很疯狂......

AccountEntry generateAccountEntry(AccountEntry after) {
    def rtn = new AccountEntry(
        type: "FOOBAR",)
    System.out.println("TYPE: " + rtn.type) // type is null here
    return rtn
}

在 println 所在的位置,在渲染服务内部调用时 type 为 null,但在正常调用时没问题。这让我困惑了一段时间,然后查看调试器,我看到这个错误附加到 rtn,返回的域对象...

org_grails_datastore_gorm_GormValidateable__errors: grails.validation.ValidationErrors: 1 个错误 对象“AccountEntry”中的错误:代码[];参数 [];默认消息 [ServletContext 不能为空]

凭直觉,我尝试在控制器中设置 servlet 上下文,但无济于事...

    def drawUp2(Contract contract) {
        groovyPageRenderer.servletContext = servletContext
        groovyPageRenderer.applicationContext = applicationContext
        contract.contractTerms = groovyPageRenderer.render(template: '/contract/contractTerms',contract: contract]
        }
    }

我想当我这样做时会丢失一些上下文,但可能有一些我无法弄清楚的简单解决方法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)