Ajax提交地址为同一个方法。

是这样的,我的页面一个form表单存在两个部分,if判断是显示修改标签还是添加标签。
提交的时候就会提交到同一个方法里。其实之前是修改区域有个input value存的是修改url路径,添加区域也有个input value存的是添加的url路径。
后来我想都提交到同一个url即同一个后台方法里。判断id是否存在来判断是要修改还是添加。

@ResponseBody()
    @RequestMapping("/edit_do")
    public JsonResult edit_do(Foods foods,@RequestParam("foodsImg")MultipartFile file){
        JsonResult jr = new JsonResult();
        try{
            String path ="";
            if(foods.getFoods_id()!=null){
                //执行更新
                //如果file为空,则表示不换图片不需要重新上传
                if(file!=null){
                    if(!FileUtil.isAllowUpImg(file.getOriginalFilename())){
                        return JsonResultUtil.getErrorJson("不允许上传的文件格式,请上传gif,jpg,bmp格式文件。");
                    }
                    //上传图片,
                    path = upload(file,200,200);
                    System.out.println(path);
                    foods.setFoods_img(path);
                }
                //执行修改
                foodsManager.updateFoods(foods);
            }else{
                //执行添加
                //创建一个ID添加
                Random r = new Random(1000);
                String foods_id ="foods"+r.nextInt()+r.nextInt();
                System.out.println(foods_id);
                foods.setFoods_id(foods_id);
                if(!FileUtil.isAllowUpImg(file.getOriginalFilename())){
                    return JsonResultUtil.getErrorJson("不允许上传的文件格式,请上传gif,jpg,bmp格式文件。");
                }
                //上传图片,
                path = upload(file,200,200);
                String updateTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//更新时间
                foods.setFoods_img(path);
                foods.setCreate_time(updateTime);
                System.out.println(foods.getCreate_time());
                foodsManager.insertFoods(foods);
            }
        } catch(RuntimeException e) {
            Logger logger = Logger.getLogger(getClass());
            logger.error("上传图片出错:"+e);
        } catch (Exception e) {
            return JsonResultUtil.getErrorJson("失败"+e.getMessage());
        }
        jr.setResult(1);
        jr.setMessage("成功");
        return jr;

    }

执行添加的时候,一切ok。后来修改就总是提示不成功。也不报错,我打断点,连方法都不进。问问原因,是不是不能写一个方法里。就必须要分开写。

已经知道哪的问题了,是因为我上传的时候MultipartFile作为参数,不能为空。我添加的时候MultipartFile不为空,可以进后台。修改的时候,不上传不进方法,添加上传文件就会进后台方法。对这个东西慢慢的恨意。。。。。。。。
然后解决的方法也给你们
图片说明

为什么不给个隐藏值来判断呢?既然你在页面都判断了修改和添加,那可以在页面给个隐藏值,最后传到后台进行判断不就可以了吗?

同意楼上,建议传参进行操作的区分

 <form method="post" name="foodsForm" id="foodsForm" enctype="multipart/form-data">
            <div class="text" style="padding: 20px 15px;">
            <#if is_edit==true >
            <table class="form-table">
                <tbody>
                    <th style="text-align: left;" align="left" colspan="2" class="groupname title">基本信息</th>
                    <input name="foods_id" id="foods_id" value="${foods.foods_id}" type="hidden"  >
                    <input name="url" id="url" value="${ctx}/core/admin/foods/edit_do.do" type="hidden"  >
                    <input  name="operate_foods" id="operate_foods" type="hidden" value="修改食品">
                    <tr>
                        <th>食品名称</th>
                        <td style="text-align: left;"><input
                            class="easyui-validatebox input_text validatebox-text validatebox-invalid"
                            type="text" maxlength="20" isrequired="true" datatype="string"
                            data-options="required:true" name="foods_name" autocomplete="off"
                            title=""  value="${foods.foods_name  }" ></td>
                    </tr>
                    <tr>
                        <th>食品价格</th>
                        <td style="text-align: left;"><input
                            class="easyui-validatebox input_text validatebox-text validatebox-invalid"
                            type="text" maxlength="20" isrequired="true" datatype="string"
                            data-options="required:true" name="foods_price" autocomplete="off"
                            title=""    value="${foods.foods_price  }"></td>
                    </tr>
                    <tr>
                        <th>上传图片(必填)</th>
                        <td style="text-align: left;">  
                        <img   src="${foods.foods_img}" style="width: 200px;height: 200px">
                        <input type="hidden" name="foods_img" value ="${foods.foods_img}" id="foods_img">
                         重新上传:<input name="foodsImg" type="file" id="foodsImg"> 
                        </td>
                    </tr>
                </tbody>
            </table>
            <#else>
            <table class="form-table">
                <tbody>
                    <th style="text-align: left;" align="left" colspan="2" class="groupname title">基本信息</th>
                    <input  name="operate_foods" id="operate_foods" type="hidden" value="添加食品">
                    <input name="edit" id="edit" value="add" type="hidden"  >
                    <input name="url" id="url" value="${ctx}/core/admin/foods/edit_do.do" type="hidden"  >
                    <tr>
                        <th>食品名称</th>
                        <td style="text-align: left;"><input
                            class="easyui-validatebox input_text validatebox-text validatebox-invalid"
                            type="text" maxlength="20" isrequired="true" datatype="string"
                            data-options="required:true" name="foods_name" autocomplete="off"
                            title=""   ></td>
                    </tr>
                    <tr>
                        <th>食品价格</th>
                        <td style="text-align: left;"><input
                            class="easyui-validatebox input_text validatebox-text validatebox-invalid"
                            type="text" maxlength="20" isrequired="true" datatype="string"
                            data-options="required:true" name="foods_price" autocomplete="off"
                            title=""   >
                        </td>
                    </tr>
                    <tr>
                        <th>上传图片(必填)</th>
                        <td style="text-align: left;">  
                            <input type="file" id="foodsImg" name="foodsImg">
                        </td>
                    </tr>
                </tbody>
            </table>
            </#if>
        </div>
        </div>
        </form>
        <div id="containerw"></div>
        <div class="buttonWrap">
            <a href="javascript:;" id="foods_edit" class="easyui-linkbutton">
                <#if is_edit==true>
                              修改
                <#else>
                             添加
                </#if>           
            </a>
        </div>  
    </div>
</div>
<script type="text/javascript">
$("#foods_edit").click(function() {
            var disabled = $(this).hasClass("l-btn-disabled");
            var operate_foot=$("#operate_foods").val();  
            if (!disabled) {
                var formflag = $("#foodsForm").form('validate');
                if (formflag) {
                    $("#foods_edit").linkbutton("disable");
                    $.Loading.show("正在保存请稍候...");
                    var options = {
                        url : $("#url").val(),
                        type : "POST",
                        dataType : "json",
                        success : function(result) {
                            if (result.result == 1) {
                                $.Loading.success("保存成功");
                                parent.SelectTable("食品管理");
                                parent.refreshCurrentTab();
                                    if(operate_foot=="修改食品"){
                                        parent.CloseTabByTitle("修改食品");
                                }else{
                                        parent.CloseTabByTitle("添加食品");
                                }

                            } else {
                                $.Loading.error(result.message);
                                $("#foods_edit").linkbutton("enable");
                            }
                        },
                        error : function(e) {
                            $.Loading.error("出错了,请重试");
                            $("#foods_edit").linkbutton("enable");
                        }
                    };
                    $('#foodsForm').ajaxSubmit(options);
                } else {
                    $.Loading.error("请检查数据");
                }
            }
        });
</script>

两个url都是同一个地址,意思是说我在url后面给参数,进去判断1还是0 修改还是添加? 可是我去判断foods的id就已经可以知道是否是修改还是添加了啊。我现在添加没问题,问题是修改的时候不进方法了。。。。。但他们还 都是同一个url 我想知道为什么添加会进后台方法,修改却不会走debug的断点都设置了也不进。

前台代码也贴出来, 既然其他都相同,两个的区别就是修改的时候添加ID后台不响应,猜一下,看看是不是你的id字段名称写错了,框架注入不进去

根据你叙述的业务,我没有看你的代码
应该这么做,将查询过来的 这条数据的主键id 隐藏在form表单内(当然如果是新增,那么主键将是空的)
ajax 提交表单数据 当id是空的时候 那一定是新增 id存在的话直接进行修改更新操作
就是这么个业务 ,没有你后面叙述的那么复杂