Pdf grailsg:在gsp页面中设置空值

Pdf grailsg:在gsp页面中设置空值,pdf,grails,set,gsp,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> gsp页面有两个变量定义如下: def privacyP

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

<g:pdfLink class="pdf" pdfController="patient" pdfAction="privacyPolicy" pdfId="${patientInstance?.id}" ><g:message code="patient.generatePrivacy" /></g:pdfLink>
gsp页面有两个变量定义如下:

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]

}
<g:set var="birthdate" value="${PatientController.getDateFromFiscalCode(patientInstance?.cf)}" />
<g:set var="cityName" value="${PatientController.getBirthplaceFromFiscalCode(patientInstance?.cf)}"/>
我认为这取决于gsp变量,但我不知道当它们为空或null时如何管理(在本例中,它们等于“”)


有什么建议吗?

而不是通过调用controller方法在GSP中定义
生日
城市名称
,只需将它们作为模型值传递即可

就像你的控制器:

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中使用的方式使用控制器可能会起作用,但不符合要求。

第二个if给我带来一些问题…事实上,只有在我对其进行注释时它才起作用…如果我使用它,我会遇到上述相同的异常,并且显示的消息代码与firs if(默认值.not.found.message)相关。如果cf为空,用户可以看到另一条错误消息(cf.not.present.message)。那么,为什么该检查会给出错误?是的,您应该得到
NullPointerException
(NPE)。由于您的
cf
可以为null或空,因此访问相同的
equals
方法可能会失败。因此,只需将if条件替换为:
if(!patientInstance.cf){}
。因为在groovy中,null值/空字符串/0/false/空列表被视为false条件。我已经按照你的建议修改了代码,但是NullPointerException仍然存在。请告诉我NPE抛出的确切位置。因为我看不到你的行号日志。这一定是在抛出方法之一,即getBirthplaceFromFiscalCode或getDateFromFiscalCode。
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)]

}