grails,jquery用g选择多选:选择

时间:2015-06-20 09:24:02

标签: jquery grails select

我将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)绑定到实例。

0 个答案:

没有答案