gpt4 book ai didi

grails - 如何将Grails Controller 映射到 View

转载 作者:行者123 更新时间:2023-12-02 15:27:23 24 4
gpt4 key购买 nike

尝试做一些(我认为)应该很简单的事情。简而言之,将grails连接到mysql数据库,经过一番摆弄之后,我开始工作了。然后,我创建了一个 Controller ,该 Controller 用于从数据库服务器中提取一些有用的数据,但又不想发送一个域,因为我真的不想再次将数据存储在数据库中。

Controller 如下所示(称为DbstatsController):

package dbfscalls
import groovy.swing.SwingBuilder;
import java.awt.FlowLayout

class DbstatsController {
def userlist() {
def query = Calls.where {}.projections { distinct 'user' }
def userret = query.list()
[userret:userret]
}
def index() {
int numberOfRecords = Calls.count()
[ numberOfRecords:numberOfRecords ]
def pf = Calls.read(1)
def firstDate = pf.CallDate
def pl = Calls.read(numberOfRecords)
def lastDate = pl.CallDate

}
}

希望它默认情况下查找从数据库生成报告的开始日期和最后日期以及数据库中整体的数量。
然后,我希望能够请求一个用户列表以获取不同用户的列表。

接下来,我创建了一个 View (在view / dbstats下),如下所示:
<g:select name="userstorep"
from="${dbstats.userlist()}"
size="15" multiple="yes" optionKey="id"
value="${author?.usertorep}" />

当我调用它时,所有发生的就是我收到一条错误消息,内容为:
| Error 2014-09-16 17:24:38,030 [http-bio-8080-exec-6] ERROR errors.GrailsExceptionResolver  - NullPointerException occurred when processing request: [GET] /DBFSCalls/dbstats/index
Cannot invoke method userlist() on null object. Stacktrace follows:
Message: Error evaluating expression [dbstats.userlist()] on line [1]: Cannot invoke method userlist() on null object
Line | Method
->> 1 | run in /Users/bengtbjorkberg/Documents/workspace-ggts/DBFSCalls/grails-app/views/dbstats/index.gsp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caused by NullPointerException: Cannot invoke method userlist() on null object
->> 1 | doCall in Users_bengtbjorkberg_Documents_workspace_ggts_DBFSCalls_grails_app_views_dbstats_index_gsp$_run_closure2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread

我敢肯定,我错过了最明显的事情,但是在浏览了这些信息之后,我无法完全弄清缺少的部分(我确信是出血的)。可能是我必须创建对象(域 Controller ),但是不知道如何。

最佳答案

渲染 View 时, Controller 会提供一个模型来执行此操作-因此,您无需直接访问 Controller 即可进行渲染,而是可以使用 Controller 提供的模型。

在您的情况下,默认情况下会呈现index View ,您必须提供一个模型。

http://grails.org/doc/latest/guide/theWebLayer.html#modelsAndViews

Controller 中的[ numberOfRecords:numberOfRecords ]现在看起来像个noop。将其放在index方法的末尾,在此处添加userlist(例如,不返回 map ,而仅将cound并将其作为键添加到 map 中),然后直接在select中使用它即可(不使用dbstats.)。

关于grails - 如何将Grails Controller 映射到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874064/

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