在GSP中导入并使用Groovy代码

10

我正在尝试在GSP中使用Groovy函数。 我的GSP顶部有<%@ page import = company.ConstantsFile %>

在我的GSP中,我有:

<p>
I have been in the heating and cooling business for <%(ConstantsFile.daysBetween())%>
</p>

以及我的 ConstantsFile.groovy

package company

import static java.util.Calendar.*

class ConstantsFile {

    def daysBetween() {
        def startDate = Calendar.instance
        def m = [:]
        m[YEAR] = 2004
        m[MONTH] = "JUNE"
        m[DATE] = 26
        startDate.set(m)
        def today = Calendar.instance

        render today - startDate
    }
}

我也尝试过将renter更改为puts、system.out等,但这不是我的主要问题。

Error 500: Internal Server Error
URI
/company/
Class
java.lang.NullPointerException
Message
Cannot invoke method daysBetween() on null object

所以我尝试一下

<p>
    I have been in the heating and cooling business for <%(new ConstantsFile.daysBetween())%>
    </p>

但是我遇到了问题

Class: org.codehaus.groovy.control.MultipleCompilationErrorsException

unable to resolve class ConstantsFile.daysBetween @ line 37, column 1. (new ConstantsFile.daysBetween()) ^ 1 error

请帮我或指向一个网站,展示应该怎么做。我试过谷歌搜索了,但所有的文章都涉及到 g:select 或其他类型的标签... 我只想像在 JSPs 里一样输出函数结果。

1个回答

19

首先,你的GSP导入应该是:

<%@ page import="company.ConstantsFile" %>

其次,你的daysBetween应该是静态的(这更有意义),并且你不应该从除控制器以外的任何东西进行渲染:

class ConstantsFile {

    static daysBetween() {
        def startDate = Calendar.instance
        def m = [:]
        m[YEAR] = 2004
        m[MONTH] = "JUNE"
        m[DATE] = 26
        startDate.set(m)
        def today = Calendar.instance

        return today - startDate
    }
}

第三步,按照以下方式访问:

<p>I have been in the heating and cooling business for ${ConstantsFile.daysBetween}</p>

最后,你应该使用标签库来完成这个任务。我现在正在编辑我的帖子以添加一个例子。

class MyTagLib {

  static namespace = "my"

  def daysBetween = { attr ->
     out << ConstantsFile.daysBetween()
  }
}

然后在您的GSP中使用

<p>I have been in the heating and cooling business for <my:daysBetween /></p>

感谢您的帮助,我尝试了您给出的第一种方式,但是我遇到了以下错误: 错误500:内部服务器错误 URI /company/ 类 groovy.lang.MissingMethodException 消息 静态公司.ConstantsFile.daysBetween()方法的签名不适用于参数类型:() 值:[] 可能的解决方案:daysBetween() - Matt Westlake
好的。非常抱歉这样做,但我正在尝试处理日历实例和数学计算。感谢您的帮助,加一并接受。 - Matt Westlake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接