gpt4 book ai didi

Grails 2.3.6 脚手架索引页抛出 ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 05:13:55 25 4
gpt4 key购买 nike

我有一个 grails 应用程序,它在运行时以一种神秘的方式失败
(无论如何对我来说都是神秘的)
ArrayIndexOutOfBoundsException 当我访问脚手架/imca2/imcaReferral/index.

* 现在编辑以将解决方案放在最后 *

大约有十几个领域类。
我还没有开始担心 UI,所以 Controller 都是动态搭建的。

所有其他 Controller 工作正常。

本 Controller :

package com.ubergen
class ImcaReferralController {
def scaffold = ImcaReferral
}

对于这个域:
package com.ubergen
class ImcaReferral {
private def todayDate = new Date()
String advocacyReferenceNum = ""
[snip a lot of code]
String toString() {
"${this.advocacyReferenceNum}: ${this.client?this.client:'-'}${this.referralIssue?', '+this.referralIssue:''}"
}
}

(我不想在这里发布域类,因为它很大)。

生成此堆栈跟踪 :
|Server running. Browse to http://localhost:8080/imca2
| Error 2014-03-12 18:48:24,935 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver - ArrayIndexOutOfBoundsException occurred when processing request: [GET] /imca2/imcaReferral/index
0. Stacktrace follows:
Message: 0
Line | Method
->> 55 | <init> in grails.orm.PagedResultList
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 15 | $tt__index in com.ubergen.ImcaReferralController
| 191 | doFilter . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1146 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 701 | run . . . in java.lang.Thread

清理和(重新)编译没有区别。

在引导过程中使用域类将数据成功推送到数据库中,因此它在此范围内起作用。

我可以从命令行运行应用程序,而不是从 eclipse/STS 内部运行。抛出同样的错误。

run-app --noreloading 也没有什么区别(现在紧抓不放)。而 run-war 也会产生同样的错误。

run-app --verbose 显示:
| Error 2014-03-12 19:58:37,745 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver  - ArrayIndexOutOfBoundsException occurred when processing request: [GET] /imca2/imcaReferral/index
0. Stacktrace follows:
java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.criterion.Order.toSqlString(Order.java:73)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getOrderBy(CriteriaQueryTranslator.java:394)
[snip]
at grails.orm.PagedResultList.<init>(PagedResultList.java:55)
[snip]
at com.ubergen.ImcaReferral.list(ImcaReferral.groovy)
[snip]
at com.ubergen.ImcaReferralController.$tt__index(script1394654146228610896735.groovy:15)
[snip]

所以索引页面调用域的 list() ,这在某种程度上是一个问题,但在堆栈跟踪中提到它的方式还不够。

我应该首先在哪里查找问题?

版本 :
ubuntu 10.04
eclipse / SpringToolSuite 3.4.0
grails 2.3.6
groovy 2.1.9 (for both project and workspace)

2014 年 3 月 13 日更新

我遵循了 Joe 的建议(如下),发现问题确实出在 ImcaReferral.list() 方法中。

在 grails 控制台中只需运行:
package com.ubergen
ImcaReferral.withTransaction { status ->
ImcaReferral.list()
}

退货
java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.criterion.Order.toSqlString(Order.java:73)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getOrderBy(CriteriaQueryTranslator.ja a:394)
[snip]
at com.ubergen.ImcaReferral.list(ImcaReferral.groovy)

查看域的排序顺序信息 答对了! 它的定义不正确,关于如何对域进行排序有两个相互竞争的定义。

我把错误的排序顺序信息注释掉:
package com.ubergen
class ImcaReferral {
...
static hasMany = [challenges:Challenge]
static mapping = {
...
sort dateReceived:'asc'
// sort challenges:'challengeRoute' // *** ERROR ***
}
}

并且(重新启动控制台后)对 list 的调用工作正常并返回一个空数组。

更正子记录的排序顺序:
package com.ubergen
class ImcaReferral {
...
static hasMany = [challenges:Challenge]
static mapping = {
...
sort dateReceived:'asc'
challenges sort: 'challengeRoute', order: 'asc' // *** CORRECT ***
}
}

解决了问题。脚手架现在可以工作了。

结论
  • 相信完整的堆栈跟踪,即使它相当冗长。它显示了要查看的类和方法。
  • 学习使用控制台。

    grails -重新加载控制台
  • 仔细阅读您的更多代码!
  • 最佳答案

    您可以尝试生成静态脚手架,看看是否会得到不同的结果。您还可以尝试在集成测试中运行该列表以查看会发生什么。

    关于Grails 2.3.6 脚手架索引页抛出 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22362737/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com