问题描述
我正在手动调用 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 (将#修改为@)