Grails-如何将数据绑定到命令对象中的映射?
我有一个表,其中每行都有一个切换开关,用于暂停/恢复计划任务(我使用Quartz scheduler来完成此操作)。显示此表的屏幕每10秒刷新一次。当前发生的情况是,每次刷新时,按钮的选定切换没有被“记住” 因此,例如,如果我使用切换开关将暂停任务单击为“开”,当屏幕刷新时,切换开关被设置回“关”,因为切换选择没有被记住 我当前的实现有一个在切换选择更改时触发的函数。这需要三个参数-名称/组(用于石英功能)和值(用于获取选中值的表行中切换开关的id)。基本上,在这个函数中,我将id映射到切换开关的布尔检查值:Grails-如何将数据绑定到命令对象中的映射?,grails,Grails,我有一个表,其中每行都有一个切换开关,用于暂停/恢复计划任务(我使用Quartz scheduler来完成此操作)。显示此表的屏幕每10秒刷新一次。当前发生的情况是,每次刷新时,按钮的选定切换没有被“记住” 因此,例如,如果我使用切换开关将暂停任务单击为“开”,当屏幕刷新时,切换开关被设置回“关”,因为切换选择没有被记住 我当前的实现有一个在切换选择更改时触发的函数。这需要三个参数-名称/组(用于石英功能)和值(用于获取选中值的表行中切换开关的id)。基本上,在这个函数中,我将id映射到切换开关
function pause(name, group, value)
{
var checked = $('#pauseScheduledTask' + value).prop('checked');
var map = {}
map[value] = checked
var data = {
taskName: name,
taskGroup: group,
idToCheckedValue: map,
};
var url = '<g:createLink controller="scheduler" action="pauseScheduledTask"/>';
ajaxUpdateAction(url, data, null, null, null, null);
}
我的控制器方法接受以下命令对象:
class PauseTaskCmd implements Validateable {
String taskName
String taskGroup
Map<String, Boolean> idToCheckedValue = new HashMap<>();
static constraints = {
taskName nullable: false
taskGroup nullable: false
}
}
类PauseTaskCmd实现可验证的{
字符串任务名
字符串任务组
Map idToCheckedValue=newhashmap();
静态约束={
taskName可为空:false
任务组可为空:false
}
}
命令对象中的字符串值绑定正常,但在我的控制器中映射始终为空。绑定到地图是一种特殊情况吗?如何将函数中的映射绑定到命令对象中的映射?如果我可以在命令对象中获得映射,那么我应该能够在屏幕刷新时使用它们来显示值
请参见上的项目
如果您要发布这样的json结构,应该可以:
{"idToCheckedValue":{"first key":"first value", "second key":"second value"}}
可以显示正在发布的生成的JSON吗?
package demo
import grails.validation.Validateable
class PauseTaskCmd implements Validateable {
String taskName
String taskGroup
Map<String, Boolean> idToCheckedValue = new HashMap<>();
static constraints = {
taskName nullable: false
taskGroup nullable: false
}
}
package johncommandobjectmap
import demo.PauseTaskCmd
class DemoController {
def pauseScheduledTask(PauseTaskCmd cmd) {
render "cmd.idToCheckedValue -> ${cmd.idToCheckedValue}"
}
}
{"idToCheckedValue":{"first key":"first value", "second key":"second value"}}
$ curl -H "Content-Type: application/json" -X POST -d '{"idToCheckedValue":{"first key":"first value", "second key":"second value"}}' http://localhost:8080/demo/pauseScheduledTask
cmd.idToCheckedValue -> [first key:first value, second key:second value]