Grails 控制器操作运行时,显示用户消息

Grails 控制器操作运行时,显示用户消息,grails,Grails,readcsv操作运行时,处理数据需要几分钟时间,具体取决于文件大小,因此在执行时,我想知道如何向用户显示消息,告诉他们数据正在进行中。。thx def readcsv() { redirect(action: "list") flash.message = "okokokok" def list = [] def dir = new File("C:/Users/User/Desktop/Summarize_20141212/ONE_FILE") di

readcsv操作运行时,处理数据需要几分钟时间,具体取决于文件大小,因此在执行时,我想知道如何向用户显示消息,告诉他们数据正在进行中。。thx

 def readcsv() {
    redirect(action: "list")
    flash.message = "okokokok"
    def list = []
    def dir = new File("C:/Users/User/Desktop/Summarize_20141212/ONE_FILE")
    dir.eachFileRecurse (FileType.FILES) { file ->
        list << file
    }
    list.each {
    File file = new File(it.path)
    def sql = groovy.sql.Sql.newInstance("jdbc:postgresql://localhost:5432/new",
            'postgres', 'sa', "org.postgresql.Driver")
    def linecount = 0
    file.eachLine() { line ->
        if (line.trim().size() == 0) {
            return null
        } else {
            def field = []
            def tokens = line.split(',(?=([^\"]*\"[^\"]*\")*[^\"]*$)')
            file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }
            linecount++
            field.push(file.name)

            for (String t : tokens) {

                field.push(t)
            }
            while (field.size() < 10) {
                field.push("")
            }
            if (linecount > 1) {
                sql.execute('insert into read_csv(version,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) ' +
                        'VALUES (0,?,?,?,?,?,?,?,?,?,?)', field)
                System.out.println(field);
            }
        }
    }
    }

}
def readcsv(){
重定向(操作:“列表”)
flash.message=“好的”
def列表=[]
def dir=新文件(“C:/Users/User/Desktop/Summary\u 20141212/ONE\u文件”)
dir.eachFileRecurse(FileType.FILES){file->
列表
如果(line.trim().size()==0){
返回空
}否则{
def字段=[]
def标记=line.split(',(?=([^\“]*\”[^\“]*\”[^\“]*\”*[^\“]*$))
file.name.lastIndexOf('.')。使用{it!=-1?file.name[0..1){
execute('insert into read_csv(version,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10)'+
‘值(0、、、、、、、、、、、、、、、、、、)’,字段)
系统输出打印项次(字段);
}
}
}
}
}

您应该将csv阅读器的功能真正移动到一个服务中,并让您的控制器调用它。可能的情况是使用异步:

class MyController {
def myService
def readcsv() {

def asyncProcess = new Thread({
    myService.readCSV(filename, input2,input3) 
  } as Runnable )

asyncProcess.start() 
forward (action: 'list')    
//render "Your file is being processed"


 //forward (controller:"someController", action: 'someAction', model [param1: params.param1 param2: param2:params.param2 ])

}
在此处读取异步:

除了你的前锋外,你还可以使用以下变化

Render:其中Render然后加载到您希望显示的实际页面中,而不是当前操作中…因此在本例中为列表

render (view: 'list', model: [params:params])
甚至可能

链:

最后重定向

redirect (controller: 'admin', action: 'welcome')
redirect(url: request.getHeader('referer'))
redirect(action: "show", id: some.id)
redirect(action: "list", params: params)

下面是在进程运行时实际显示呈现消息的编码,如果我想在处理后显示def list()页面,如何执行?如果我只是在末尾添加了redict,呈现消息将不再显示。。

def readcsv(){
def asyncProcess=新线程({
def列表=[]
def dir=新文件(“C:/Users/User/Desktop/Summary\u 20141212/ONE\u文件”)
dir.eachFileRecurse(FileType.FILES){file->
列表
如果(line.trim().size()==0){
返回空
}否则{
def字段=[]
def标记=line.split(',(?=([^\“]*\”[^\“]*\”[^\“]*\”*[^\“]*$))
file.name.lastIndexOf('.')。使用{it!=-1?file.name[0..1){
execute('insert into read_csv(version,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10)'+
‘值(0、、、、、、、、、、、、、、、、、、)’,字段)
系统输出打印项次(字段);
}
}
}
}
}作为可运行的)
asyncProcess.start()
呈现“正在处理您的文件”
}

您好,我试过了,但呈现的消息只在结尾显示……我希望它在开头显示……您确定吗?如果它是通过异步进行的,那么该任务将在后台生效。可能是您的任务完成得非常快,而且看起来是这样。请尝试在服务中进行csv解析并设置长睡眠时间ee如果呈现消息首先出现。在这里多次使用它-对我来说效果很好注意这一次专门围绕睡眠和发送消息-异步不绑定到应用程序的操作,一旦触发,它将在后台执行它需要执行的操作(不知道触发它的是什么,等等)。与render类似,还有另一个名为forward的命令,您可以在异步进程之外使用。开始我将更新我的应答添加了它?您看不到forward和render被注释掉了吗?
redirect (controller: 'admin', action: 'welcome')
redirect(url: request.getHeader('referer'))
redirect(action: "show", id: some.id)
redirect(action: "list", params: params)
def readcsv() {
        def asyncProcess = new Thread({
            def list = []
            def dir = new File("C:/Users/User/Desktop/Summarize_20141212/ONE_FILE")
            dir.eachFileRecurse(FileType.FILES) { file ->
                list << file
            }
            list.each {
                File file = new File(it.path)
                def sql = groovy.sql.Sql.newInstance("jdbc:postgresql://localhost:5432/new",
                        'postgres', 'sa', "org.postgresql.Driver")
                def linecount = 0
                file.eachLine() { line ->
                    if (line.trim().size() == 0) {
                        return null
                    } else {
                        def field = []
                        def tokens = line.split(',(?=([^\"]*\"[^\"]*\")*[^\"]*$)')
                        file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }
                        linecount++
                        field.push(file.name)

                        for (String t : tokens) {

                            field.push(t)
                        }
                        while (field.size() < 10) {
                            field.push("")
                        }
                        if (linecount > 1) {
                            sql.execute('insert into read_csv(version,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) ' +
                                    'VALUES (0,?,?,?,?,?,?,?,?,?,?)', field)
                            System.out.println(field);
                        }

                    }

                }
            }
        } as Runnable )
        asyncProcess.start()
        render "Your file is being processed"


    }