关于修改商品的疑问
<form id="admin-form" name="addForm" action="${pageContext.request.contextPath}/ProductServlet?method=update" method="post" enctype="multipart/form-data"> <input type="hidden" name="pid" value="${product.pid}"> <input type="hidden" name="filename" value="${product.filename}"> <input type="hidden" name="path" value="${product.path}"> <div class="panel-body bg-light"> <div class="section-divider mt20 mb40"> <span> 基本信息 </span> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 名称 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="pname" class="gui-input" placeholder="名称" type="text" value="${product.pname}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 价格 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="price" class="gui-input" placeholder="价格" type="text" value="${product.price}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 作者 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="author" class="gui-input" placeholder="作者" type="text" value="${product.author}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 分类 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field select"> <select id="departmentSn" name="cid" class="gui-input" placeholder="分类..."> <c:forEach var="cl" items="${categoryList}"> <c:choose> <c:when test="${cl.cid==product.category.cid}"> <option value="${product.category.cid}" selected="selected">${product.category.cname}</option> </c:when> <c:otherwise> <option value="${cl.cid}">${cl.cname}</option> </c:otherwise> </c:choose> </c:forEach> </select> <i class="arrow double"></i> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 图片 </label> </label> </div> <div class="col-md-6"> <label for="name" class="field"> <input id="name" name="filename" class="gui-input" placeholder="图片" type="file" value="上传图片"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 描述 </label> </label> </div> <div class="col-md-6"> <label for="address" class="field"> <input id="address" name="description" class="gui-input" placeholder="描述" type="text" value="${product.description}"/> </label> </div> </div> <div class="panel-footer text-center"> <button type="submit" class="button"> 保存 </button> <button type="button" class="button" onclick="javascript:window.history.go(-1);"> 返回 </button> </div> </div> </form>
我有个地方搞不懂,如果用户修改商品的时候,没有更换图片,那文件上传项是不是就是为空,然后在工具类中
判断为空时,就不进行数据的保存,
然后就会从隐藏字段中获取之前商品已经存在的图片数据
请问我理解的对吗?
2:
我的疑问是,如果用户在修改商品时,更换了图片,上传了新的图片,那会不会跟隐藏字段中的旧数据发生冲突的?
我搞不懂,为什么有隐藏字段的旧数据在,新上传的图片可以把它覆盖掉?
正在回答 回答被采纳积分+1
输出这个
CategoryService的findAll方法执行了
CategoryDao的findAll方法执行了...
filename=wen.jpg
{path=/upload/34c97b19171b4318bdf699e7817fe207.jpg, filename=wen.jpg, pname=测试, price=100.0, author=qq, cid=1}
测试:/upload/eb2f54d7fa2f4c89903baad84d9e36cf.jpg wumingnvlang.jpg
ProductServlet的findAll方法
ProductService的findAll方法
ProductDao的findAll方法
商品Product{pid=75, pname='测试', author='qq', price=100.0, description='qqq', filename='wumingnvlang.jpg', path='/upload/eb2f54d7fa2f4c89903baad84d9e36cf.jpg', category=Category{cid=1, cname='人物画', cdesc='描述人物的画'}} 商品分类名称:人物画
这是页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <!-- Mirrored from admindesigns.com/demos/absolute/1.1/admin_forms-validation.html by HTTrack Website Copier/3.x [XR&CO'2014], Thu, 06 Aug 2015 02:56:15 GMT --> <head> <!-- Meta, title, CSS, favicons, etc. --> <meta charset="utf-8"> <title>油画商城--修改商品</title> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/assets/skin/default_skin/css/theme.css"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/assets/admin-tools/admin-forms/css/admin-forms.css"> <link rel="shortcut icon" href="${pageContext.request.contextPath }/assets/img/favicon.ico"> </head> <body class="admin-validation-page" data-spy="scroll" data-target="#nav-spy" data-offset="200"> <div id="main"> <%@ include file="header.jsp" %> <%@ include file="left.jsp" %> <section id="content_wrapper"> <section id="content" class="table-layout animated fadeIn"> <div class="tray tray-center"> <div class="content-header"> <h2> 编辑商品信息 </h2> <p class="lead"></p> </div> <div class="admin-form theme-primary mw1000 center-block" style="padding-bottom: 175px;"> <div class="panel heading-border"> <form id="admin-form" name="addForm" action="${pageContext.request.contextPath}/ProductServlet?method=update" method="post" enctype="multipart/form-data"> <div class="panel-body bg-light"> <div class="section-divider mt20 mb40"> <span> 基本信息 </span> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 名称 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="pname" class="gui-input" placeholder="名称" type="text" value="${product.pname}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 价格 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="price" class="gui-input" placeholder="价格" type="text" value="${product.price}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 作者 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field"> <input name="author" class="gui-input" placeholder="作者" type="text" value="${product.author}"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 分类 </label> </label> </div> <div class="col-md-6"> <label for="sn" class="field select"> <select id="departmentSn" name="cid" class="gui-input" placeholder="分类..."> <c:forEach var="cl" items="${categoryList}"> <c:choose> <c:when test="${cl.cid==product.category.cid}"> <option value="${product.category.cid}" selected="selected">${product.category.cname}</option> </c:when> <c:otherwise> <option value="${cl.cid}">${cl.cname}</option> </c:otherwise> </c:choose> </c:forEach> </select> <i class="arrow double"></i> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 图片 </label> </label> </div> <div class="col-md-6"> <label for="name" class="field"> <input id="name" name="filename" class="gui-input" placeholder="图片" type="file" value="上传图片"/> </label> </div> </div> <div class="section row"> <div class="col-md-2"></div> <div class="col-md-1"> <label for="sn" class="field prepend-icon"> <label for="sn" class="field-icon"> 描述 </label> </label> </div> <div class="col-md-6"> <label for="address" class="field"> <input id="address" name="description" class="gui-input" placeholder="描述" type="text" value="${product.description}"/> </label> </div> </div> <div class="panel-footer text-center"> <button type="submit" class="button"> 保存 </button> <button type="button" class="button" onclick="javascript:window.history.go(-1);"> 返回 </button> </div> </div> <input type="hidden" name="pid" value="${product.pid}"> <input type="hidden" name="filename" value="${product.filename}"> <input type="hidden" name="path" value="${product.path}"> </form> </div> </div> </div> </section> </section>
我把隐藏字段放最底下了
1、是的同学理解的是对的,文件上传像为空时,还是原来的数据,不进行更新。
2、不会冲突的,它会把它覆盖掉,以为修改时,是把修改页面提交过了来的数据重新放到一个新的对象里去了,然后把这个新的对象拿去修改到数据库中,不会冲突,而是覆盖掉了:
3、他们是按照表单提交的属性来读取数据的,并不是把之前的map中的数据覆盖掉了。也并没有说在读取到隐藏字段的时候,才会把filenamePath 之类的存入。它就是按照顺序读取的。都会一起读完的。map中的存的就会是:
例如:key:id value:1
key:name value:“abc”
。。。。。
然后都把它们取出来,放到新的product中去。
然后把这个新的product传给sql进行更新数据。所以这个隐藏字符放在哪里都是无所谓的。都可以通过map.get(key) 拿出来的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
关于疑问2,我的猜想是,因为隐藏字段在表单的上部分,而文件上传项是在下面,如果提交表单时候,是优先处理上面的表单项数据,比如
1:普通表单项1
2:普通表单项2
3:文件表单项
4:普通表单项3
在UploadFile工具类中,是按照表单项的顺序来读取数据的,请问对吗?
回到问题2
然后由于隐藏字段在文件上传项的上面
所以,如果用户上传的新的图片,在工具类读取到隐藏字段时候,会把filename,path,之类的先存入map集合中,然后当工具类读取到有新的文件上传,并且文件不为空,就开始读取数据,并把之前map集合中关于filename,path的数据覆盖掉了.
请问我的猜想正确吗?
UploadFile工具类读取数据是不是根据表单项的顺序来读取的呢?
如果我把隐藏字段放在最底下,会不会就一直无法更换新的图片呢?
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星