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
    }
}

我也尝试过将租户更改为 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

请有人帮助我或将我指向一个显示要做什么的网站..我尝试过谷歌搜索,所有内容都在谈论 ag:select 或其他类型的标签...我只想像我使用的那样输出函数的结果在 JSP 中。

4

1 回答 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>

最后,您应该为此使用 taglib。我现在正在编辑我的帖子以添加一个示例

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>
于 2013-02-05T01:05:24.760 回答