是这样的,我的页面一个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存在的话直接进行修改更新操作
就是这么个业务 ,没有你后面叙述的那么复杂