我将jquery选择的插件与grails <g:select>
一起用于多选。它应该是多个用户的选择器,通过has many = [users: User]
在域类中定义。它在大多数情况下都很好用但是如果例如选择了3个用户并且我想只删除一个,则没有任何反应。如果我删除2它正确更新。如果没有选择任何内容,我可以逐个添加所有用户,并且可以正常工作。
这是我在gsp中的代码:
<g:select id="pickUsers" name="users" from="${usermanagement.User.list()}" multiple="true" optionKey="id" value="${projectInstance?.users*.id}" class="many-to-many"/>
<script type="text/javascript">
$('#pickUsers').chosen({width: "25%",
no_results_text: "Keine Ergebnisse für",
placeholder_text_multiple: "Mitarbeiter suchen..."})
$('#pickUsers').trigger("chosen:updated")
$('#pickUsers').on('change', function() {
var currentValues = $('#pickUsers').chosen().val();
if (currentValues == null) {
$("#pickUsers").prepend("<option value='' selected='selected'></option>");
}
});
</script>
开发者工具:
_method:PUT
version:8
users:3
users:2
_action_update:Aktualisieren
这显示了正确的选择,但显然它没有更新它,它仍然显示所有3个用户。在grails中,我刚使用has many
并且没有改变任何内容。
我刚刚在控制器更新方法中记录了传入的用户:
设置了所有三个用户:users: [leader, test, me]
在视图中删除测试用户:users: [leader, me, leader, test]
就像我提到的那样,如果我删除 ONE 用户,如果我删除2所有作品,就会发生这种情况
编辑:潜力&#34;修复&#34;在控制器中:
@Transactional
def update(Project projectInstance) {
if (projectInstance == null) {
notFound()
return
}
//get users from jquery users-picker in view
def usersPicker = params.users
//clear users set of incoming instance
if(projectInstance.users != null){
projectInstance.users.clear()
}
//add users from picker in view to set
for (user in usersPicker){
def tempUser = User.get(user)
projectInstance.users.add(tempUser)
}
if (projectInstance.hasErrors()) {
respond projectInstance.errors, view:'edit'
return
}
projectInstance.save flush:true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [
message(code: 'Project.label', default: 'Project'),
projectInstance.id
])
redirect projectInstance
}
'*'{ respond projectInstance, [status: OK] }
}
}
上述日志直接来自update方法中的传入实例。我需要清除用户设置并将用户从currentValues
(视图中的javascript)绑定到实例。