grails g:在gsp页面中设置为null值

时间:2014-07-06 20:16:44

标签: pdf grails set gsp

在我的grails项目中,我正在使用PDF插件。为此,我使用以下链接生成PDF:

<g:pdfLink class="pdf" pdfController="patient" pdfAction="privacyPolicy" pdfId="${patientInstance?.id}" ><g:message code="patient.generatePrivacy" /></g:pdfLink>

privacyPolicy()方法如下:

def privacyPolicy(Long id){

    def patientInstance = Patient.get(id)

    if (!patientInstance) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: 'patient.label', default: 'Patient'), id])
        redirect(action: "list")
        return
    }

    if(patientInstance.cf.equals("")) {
        flash.message = message(code: 'cf.not.present.message', args: [message(code: 'patient.label', default: 'Patient'), id])
        redirect(action: "list")
        return
    }

    [patientInstance: patientInstance]

}

gsp页面有两个变量定义如下:

<g:set var="birthdate" value="${PatientController.getDateFromFiscalCode(patientInstance?.cf)}" />
<g:set var="cityName" value="${PatientController.getBirthplaceFromFiscalCode(patientInstance?.cf)}"/>

这两个变量都依赖于cfpatientInstance可能不存在

在调试模式下分析流程(当cf为空时),我注意到privacyPolicy()被调用了两次。第一次进入第二次if,但然后它首先进入if。

控制台中的错误如下:

ERROR pdf.PdfService  - org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 

there was a problem with PDF generation java.lang.NullPointerException: Cannot get property 'length' on null object

我认为这取决于gsp变量,但我不知道如何管理它们是空的还是null(在这种情况下它们等于&#34;&#34;)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

而是定义birthdate&amp;通过调用控制器方法在gsps中cityName,只需将它们作为模型值传递。

喜欢你的控制器:

def privacyPolicy(Long id){

    def patientInstance = Patient.get(id)

    if (!patientInstance) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: 'patient.label', default: 'Patient'), id])
        redirect(action: "list")
        return
    }

    if(patientInstance.cf.equals("")) {
        flash.message = message(code: 'cf.not.present.message', args: [message(code: 'patient.label', default: 'Patient'), id])
        redirect(action: "list")
        return
    }

    [patientInstance: patientInstance, birthdate: getDateFromFiscalCode(patientInstance.cf),
            cityName: getBirthplaceFromFiscalCode(patientInstance.cf)]

}

以gsp中使用的方式使用控制器可能有效,但不符合标记。