0

我有一个 jqGrid,我在其中向 colmodel 发送一个名为“设备”的特定属性的字符串值。只要值在网格上完美显示,一切都很好。我还添加了一个添加和编辑按钮,一切都很好,工作正常,表单按预期显示。(原谅这篇明显长的帖子,但它非常容易理解)

我在添加表单上修改了名为设备的字段,并像这样注入了我自己的多项选择

模型

            {name:'equipments',index:'equipments', width:6, editable:true, edittype:'custom',
              editoptions:{
                  custom_element:function(){                                  
                        return $('<div id="mytrensferselect"><div class="transfer"><select id="select1" multiple="multiple"></select><a href="#" id="addbutton">add</a></div><div class="transfer"><select id="select2" multiple="multiple"></select><a href="#" id="removebutton">remove</a></div></div>');  
                      },
                      custom_value:function(ele){
                                return ele.val();           
                      }                               
                  }                           
            }

添加按钮 - beforeShowForm 选项

                    bSubmit: "Save and New",
                    bCancel: "Cancel",
                    beforeShowForm: function(form) {
                            $.get('<c:url value="/moduleinstances/retrieveequipments?miId="/>' , function(data){  //load in my list of equipments as json string
                                var obj = jQuery.parseJSON(data);  //parse the resulting json in order to populate select1 and select2
                            $("#select1").html(obj.remaining);
                            $("#equipments").removeAttr("name").removeAttr("id").removeClass("customelement");
                            $("#select2").html(obj.owning).attr("name","equipments").attr("id","equipments").addClass("customelement");
                            $('#addbutton').click(function() {
                                return !$('#select1 option:selected').remove().appendTo('#equipments');
                            });
                            $('#removebutton').click(function() {
                                return !$('#equipments option:selected').remove().appendTo('#select1');
                            });
                            }); //End AJAX CALL abd CUSTOM Transfer Select logic

//Start Logic For Custom Save and Close Button

                        $('<a href="#">Save and Close<span class="ui-icon ui-icon-disk"></span></a>').click(function() {
                            if($.isNumeric($(form.selector+" #rateOfPay").val())){
                                $.post('<c:url value="/moduleinstances/create/${courseModule.id}"/>', $('#FrmGrid_list2').serialize() , function(data){
                                    $('#list2').trigger("reloadGrid");
                                    $("#cData").trigger('click');
                                }); 
                            }else{
                                    alert("Pay Rate must be numeric");
                            }                      
                        }).addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left")
                        .prependTo("#Act_Buttons>td.EditButton");
                        $('#title').attr('value','${courseModule.name}'); 
                        $("#leadLecturer").val( '${lecturer.id}' );
                    }

这是我添加表单的相关部分。

在此处输入图像描述

当我单击保存和新建时,该功能工作正常,这是我通过bSubmit: "Save and New"上面取消清除的提交按钮。这方面的邮政数据显示在您的左侧。当我单击Save and close作为我的自定义按钮的按钮时。帖子数据显示在您的右侧。

在此处输入图像描述

Save and Close 使用 jquery 像这样序列化整个表单$('#FrmGrid_list2').serialize(),这就是它变得毛茸茸的地方。

如果我们查看在这两种情况下发布的设备内容,我们可以看到名称差异。似乎 jqGrid 足够智能,可以计算出它的一组值,而 jquery serialize() 并没有按照我想要的方式进行。我正在使用 Spring MVC 3.0,这是我的设备数据执行操作的地方。

@RequestMapping(value = "update", method = RequestMethod.POST)
public @ResponseBody String update(Model uiModel,
        @RequestParam("id") Long mId,
        @RequestParam("campus") Long cId,
        @RequestParam("leadLecturer") Long lId,//This is actually a Person ID.
        @RequestParam("semesterStartDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar semesterstartdate,
        @RequestParam("semesterEndDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar semesterenddate,
        @RequestParam("tuitionStartDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar tuitionstartdate,
        @RequestParam("tuitionEndDate") @org.springframework.format.annotation.DateTimeFormat(pattern = "MMMM dd, yyyy") java.util.Calendar tuitionenddate,
        @RequestParam("rateOfPay") Double rateOfPay,
        @RequestParam("equipments[]") ArrayList<String> equipments,
        HttpServletRequest httpServletRequest) { Bla...bla...bla }

看看最后一个@RequestParam,Spring能够处理项目数组,但是当它使用jQuery序列化发布时,动作找不到名为“设备[] ”的参数我在这里看到了一个关于这个的链接,我可以简单地这样做吗?

有任何想法吗

4

1 回答 1

0

好的,为了其他人的利益,我为解决问题所做的是将表单手动序列化为格式正确的 json-string 并将该字符串变量发送到服务器。就像是

//select each form element and get its value using jquery
    var customPostData = '({ sessionNumber: "'+$("#sessionNumber").val()+'", sessionDate: "'+$("#sessionDate").val()+'", starttime: "'+$("#starttime").val()+'", endtime: "'+$("#endtime").val()+'", sessionStatus: "'+$("#sessionStatus").val()+'", sessionType: "'+$("#sessionType").val()+'", topic: "'+$("#topic").val()+'", id: "'+myId+'", equipments:'+selectedequips.toSource()+'})';
    var submitdata = eval('(' + customPostData + ')'); //use parseJSON insted of eval

    $.post("my-url", submitdata , function(data){
       //use the returning information in the data variable
    });
于 2012-10-18T15:28:12.367 回答