Grails多选插件无法正常工作

时间:2014-07-23 15:35:43

标签: grails multi-select

我的grails应用程序中有6个下拉列表使用g select标签编写,现在我需要在所有下拉菜单中进行多项选择,但我无法使用Grails multi select plugin

实现此功能

首先,我使用以下几行包含插件 - 我的Buildconfig.groovy中的多选和资源:

compile ":multi-select:0.2"
runtime ":resources:1.2.2"

以下代码位于我的“index.gsp”文件

我早期的基本单选选择下拉代码:

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

这必须改为如下所示: 尝试多选下拉列表:

<ui:multiSelect from="['AFFILIATES', 'CSE','DISPLAYADS','EMAIL','MOBILEWEB','OTHERS','ORGANIC','SEO', 'SEM']" multiple="yes" name="mv" id = "mv" noSelection="['':'Select One']" 
           onchange="${remoteFunction(
           controller:'Com', 
           action:'ajaxGetMv', 
           // params:'\'mv=\' + escape(this.value)',
           params:'\'mv=\'+this.value+\'&department=\'+$(\'department\').value+\'&device=\'+$(\'device\').value+\'&browser=\'+$(\'browser\').value+\'&platform=\'+$(\'platform\').value+\'&time_period=\'+$(\'time_period\').value+\'&metric=\'+$(\'metric\').value',
           onSuccess: 'printpgtyp(data)')}"
/>

另外,我在标签外面的index.gsp中添加了以下行(表单标签包含我所有的g选择标签 - 下拉列表)

<ui:resources includeJQuery="true"/> 

目前尚不清楚这是否应该是真/假,因为两种情况下结果相同。 Reference link

毕竟,我仍然得到与以前相同的下拉菜单,但还没有多项选择。我正在使用Grails - 2.3.4 我在这里错过了什么?我还应该添加/删除什么?这些步骤是否正确?

任何建议/反馈都将受到高度赞赏。

更新:

现在在index.gsp中使用它:

<g:select from="['AFFILIATES', 'CSE','DISPLAYADS','EMAIL','MOBILEWEB','OTHERS','ORGANIC','SEO', 'SEM']" name="mv" id = "mv" multiple="true"
           onchange="${remoteFunction(
           controller:'Com', 
           action:'ajaxGetMv', 
           // params:'\'mv=\' + escape(this.value)',
           params:'\'mv=\'+this.value+\'&department=\'+$(\'department\').value+\'&device=\'+$(\'device\').value+\'&browser=\'+$(\'browser\').value+\'&platform=\'+$(\'platform\').value+\'&time_period=\'+$(\'time_period\').value+\'&metric=\'+$(\'metric\').value',
           onSuccess: 'printpgtyp(data)')}"
></g:select> 

控制器是这样的

    def ajaxGetMv = {
            if(params.metric == 'Marketing visits')
            {
            def com = Com.executeQuery("select p.date_hour, p.visits, case when visits_ly IN (0,null) THEN 0 ELSE ((visits/visits_ly - 1)*100) END as yoy, case when visits_lw IN (0,null) THEN 0 ELSE ((visits/visits_lw - 1)*100) END as wow, p.mv, p.browser, p.department, p.platform, p.device, p.time_period from Com p where p.department = ? and p.device = ? and p.browser = ? and p.platform = ? and p.mv = ? and p.time_period = ? order by col_0_0_ asc ",[params.department, params.device, params.browser, params.platform, params.mv, params.time_period])
            render com as JSON
            }
//.........else if and so on for all my metrics

现在,索引和控制器只传递一个值,如何让它们在这里进行多项选择? 我认为控制器必须在这里改变

1 个答案:

答案 0 :(得分:1)

Grails 2.x支持不带插件的多选。以下是文档中的示例。多选的UI不是最好的。

// create multiple select
<g:select name="cars"
      from="${Car.list()}"
      value="${person?.cars*.id}"
      optionKey="id"
      multiple="true" />

以下是我在视图和控制器中访问多选复选框的示例:

   <g:each in="${Car.findAllByActive(true)}" var="car">
        <div class="span4 checkbox">
             <g:checkBox name="cars" value="${car.id}" checked="${car in instance?.cars}" />
              <label>${car.name}</label>
        </div>
    </g:each>

    params.cars.each { it ->
        instance.cars.add(Car.findById(it as Long))
    }