【问题标题】:Passing date values from DateRangeSlider to Controller in Grails将日期值从 DateRangeSlider 传递到 Grails 中的控制器
【发布时间】:2014-07-16 07:18:59
【问题描述】:

我在我的 GSP 中使用 jQDateRangeSlider,并且我也有一个名为“mv”的下拉菜单。我正在尝试将日期滑块上选择的日期值传递到我的控制器中。这就是我在 GSP 中的代码的样子:

<g:select from="['AFFILIATES', 'CSE','DISPLAYADS','EMAIL','MOBILEWEB','OTHERS','ORGANIC','SEO', 'SEM']" name="mv" id = "mv" 
           onchange="${remoteFunction(
           controller:'Pgtyp', 
           action:'ajaxGetMv', 
           params:'\'mv=\' + escape(this.value)+\'&date_hour=\'+ z',
           //params:'\'mv=\'+this.value',
           onSuccess: 'printpgtyp(data)')}"
></g:select> 

</form>
<script>
dataFile = "http://localhost:8080/marchmock2/Pgtyp/datejson";

        d3.json(dataFile, function(error,data) {
        if (data) 
                dataset = data;
                var min = dataset[0].a;
                var min2 = new Date(min);
                var max = dataset[dataset.length - 1].b;
                var max2 = new Date(max);
                function addZero(val) {
            if (val < 10) {
                return "0" + val;
            }   
            return val;
            }
                var s = $j("#slider").dateRangeSlider({

            bounds: {
                "min": min2,
                "max": max2
            },
            range: {
                min: {
                    hours: 1
                }
            },
            formatter:function(val){
                var m = moment(val);
                return m.format("DD/MM/YYYY HH:00:00 ");
            },
             defaultValues:{
                min: min2,
                max: max2
            }
        });
                x = (s.dateRangeSlider("values").min);
        x.setMinutes(0);
        x.setSeconds(0);
                z = x.getFullYear()+'-'+(x.getMonth()+1)+ '-'+x.getDate()+' '+x.getHours()+':'+'00'+':'+'00' ;
                var y = (s.dateRangeSlider("values").max);
        y.setMinutes(0);
        y.setSeconds(0);
         $j('#slider').on("userValuesChanged",function (e, data) {
                        var x = data.values.min;
                        x.setMinutes(0);
                        x.setSeconds(0);
                       z = x.getFullYear()+'-'+(x.getMonth()+1)+ '-'+x.getDate()+' '+x.getHours()+':'+'00'+':'+'00' ;
                        var last = data.values.max;
                        last.setMinutes(0);
                        last.setSeconds(0);
                        console.log(last)
             })
        });

这是我的控制器的样子:

class PgtypController {



    def ajaxGetMv = {
        def pgtyp = Pgtyp.executeQuery("select p.date_hour,p.visits, p.mv, p.browser,p.pagetype,p.platform,p.device,p.time_period from Pgtyp p where p.mv = ? and p.date_hour= ? order by col_0_0_ asc ",[params.mv, params.date_hour])

        render pgtyp as JSON
    }

     def dataSource


        def datejson = {
        def sql = new Sql(dataSource)
        def rows = sql.rows("select min(date_hour) as a , max(date_hour) as b from pgtyp")
        sql.close()
        render rows as JSON
    }

我收到以下错误:

2014-07-16 12:07:29,538 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver  - ClassCastException occurred when processing request: [POST] /marchmock2/pgtyp/ajaxGetMv - parameters:
date_hour: 2014-6-18 10:00:00
mv: OTHERS
java.lang.String cannot be cast to java.util.Date. Stacktrace follows:
Message: java.lang.String cannot be cast to java.util.Date
    Line | Method
->>   11 | doCall    in marchmock2.PgtypController$_closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    200 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    744 | run       in java.lang.Thread

我哪里错了?

【问题讨论】:

    标签: jquery jquery-ui grails jquery-plugins params


    【解决方案1】:

    根据异常你必须将date_hourString 转换为Date:

    DateFormat df = new SimpleDateFormat( 'yyyy-M-dd HH:mm:ss' )
    Date d = df.parse params.date_hour
    

    【讨论】:

    • 如果我想为 date_hour 发送两个参数怎么办: params:'\'mv=\' + escape(this.value)+\'&date_hour=\'+ z+\'&date_hour=\' + b',在控制器中,我有: def pgtyp = Pgtyp.executeQuery("select p.date_hour,p.visits, p.mv, p.browser,p.pagetype,p.platform,p.device,p .time_period 来自 Pgtyp p 其中 p.mv = ? and p.date_hour >= ? and p.date_hour
    • 请用新代码更新您的原始问题。那些 JS 单行字很难阅读 >)
    • 我添加了一个新问题stackoverflow.com/questions/24782233/…
    • 嘿,我把整个 remoteFunction 代码复制到了滑块的 on ("UserValuesChanged") 中。它应该工作,对吧???但是,它不是..
    • 看看,g.remoteFunction() 在&lt;g:select&gt; 标签中产生了什么
    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多