我的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
现在,索引和控制器只传递一个值,如何让它们在这里进行多项选择? 我认为控制器必须在这里改变
答案 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))
}