添加商品

修改对应的超链接url,controller转发到对应的JSP页面


<a href="${path}/item/toAddItem.do" class="btn80x20" title="添加商品">添加商品</a>
    /**
* 跳转到添加商品页面
* @return
*/
@RequestMapping("/toAddItem.do")
public String toAddItem() { return "item/addItem";
}

我们发现添加商品页面是由4个选项卡组成:

基本信息

在基本信息的选项卡中,还是需要我们查询所有的品牌数据,在页面上给用户选择:


<select id="brandId" name="brandId">
<option value="">请选择</option>
<c:forEach items="${ebBrands }" var="brand">
<option value="${brand.brandId }">${brand.brandName }</option>
</c:forEach>
</select>

上传文件

我们在添加品牌的时候已经做过了上传文件的功能了,逻辑大致是一样的,我们拿过来修改一些东西即可!

在表单form标签中,记得要使用以下的数据类型进行表单提交!


enctype="multipart/form-data"

修改对应的name名称



                <p><label></label><input type='file' size='27' id='imgsFile' name='imgsFile' class="file"
onchange='submitUpload()'/><span id="submitImgTip" class="pos">请上传图片宽为120px,高为50px,大小不超过100K。</span> <input type='hidden' id='imgs' name='imgs' value='' reg2="^.+$" tip="亲!您忘记上传图片了。"/>
<span></span>
</p>

Jquery代码:


function submitUpload() {
var opt = {
//重新指定form的action的值
url: "${path}/upload/uploadPic.do",
type: "post",
dateType: "json",
success: function (responseText) {
var jsonObj = $.parseJSON(responseText.replace(/<.*?>/ig, ""));
$("#imgsImgSrc").attr("src", jsonObj.realPath);
$("#imgs").val(jsonObj.relativePath);
},
error: function () {
alert("系统错误");
}
};
$("#form111").ajaxSubmit(opt);
}

添加基本属性测试

到目前位置,我们的Controller可以拿到Item页面全部的基本属性:

商品基本属性中的隐藏属性

商品的id是使用oracle中的序列进行自动增长

        /*对于商品的id,我们是自增长的。*/
<selectKey keyProperty="itemId" order="BEFORE" resultType="long">
select seqitemid.nextval from dual
</selectKey>

对于审核状态,默认设置为0【待审核】
对于上架状态,默认设置为1【下架】
对于销售量,默认设置为0【并没有人购买】

在Mapper中把对应的属性设置默认值


(#{itemId,jdbcType=DECIMAL}, #{itemName,jdbcType=VARCHAR}, #{itemNo,jdbcType=VARCHAR},
#{brandId,jdbcType=DECIMAL}, #{catId,jdbcType=DECIMAL}, #{tagImgId,jdbcType=DECIMAL},
#{tagImg,jdbcType=DECIMAL}, #{isNew,jdbcType=DECIMAL}, #{isGood,jdbcType=DECIMAL},
#{isHot,jdbcType=DECIMAL}, #{promotion,jdbcType=VARCHAR}, 0,
1, #{imgs,jdbcType=VARCHAR}, #{keywords,jdbcType=VARCHAR},
#{pageDesc,jdbcType=VARCHAR}, #{itemRecycle,jdbcType=DECIMAL}, #{onSaleTime,jdbcType=TIMESTAMP},
#{checkTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, #{updateUserId,jdbcType=DECIMAL},
sysdate, #{checkerUserId,jdbcType=DECIMAL}, #{fullPathDeploy,jdbcType=VARCHAR},
#{fullPathDeployOffer,jdbcType=VARCHAR}, #{originalItemId,jdbcType=DECIMAL}, #{lastStatus,jdbcType=DECIMAL},
#{merchantId,jdbcType=DECIMAL}, #{itemSort,jdbcType=DECIMAL}, 0,
#{createUserId,jdbcType=DECIMAL}, #{simLevel,jdbcType=DECIMAL}, #{giftDesc,jdbcType=VARCHAR},
#{giftImg,jdbcType=VARCHAR}, #{giftShowType,jdbcType=VARCHAR}, #{imgSize1,jdbcType=VARCHAR}
)

大字段数据

我们第二个选项卡的原型界面如下:

我们需要用到另外一张表:

因此我们需要逆向工程对应的表:


<table schema="" tableName="EB_ITEM_CLOB" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"
>

加载对应的映射文件:

Dao层

id是EbItemClob无法从页面上获取的,因此我们需要传递进去。

@Repository
public class EbItemClobDaoImpl extends SqlSessionDaoSupport implements EbItemClobDao {
String nameSpace = "com.rl.ecps.sqlMap.sqlMap.EbItemClobMapper.";
public void saveItemClob(EbItemClob ebItemClob, Long itemId) {
ebItemClob.setItemId(itemId);
this.getSqlSession().insert(nameSpace + "insert", ebItemClob);
}
}

fckEditor文本编辑器

其实就是一个文本域,而该文本域是能带有格式的。以前我们使用过“富文本编辑器”就是这么的一种,这次我们使用fckEditor文本编辑器

首先,把我们的下载下来的文档加入到web目录下。

引入核心的JS文件


<script type="text/javascript" src="<c:url value='/${system }/res/plugins/fckeditor/fckeditor.js'/>"></script>

创建出FCK对象,设置相关属性:


var fck = new FCKeditor("itemDesc");
fck.BasePath = "${path}/ecps/console/res/plugins/fckeditor/";
fck.Config["ImageUploadURL"] = "${path}/upload/uploadForFck.do?typeStr=Image";
fck.Height = 400;
fck.ToolbarSet = "Default";
fck.ReplaceTextarea();

itemDesc就是我们文档域的id值:

 <textarea name="itemDesc" id="itemDesc"></textarea>

创建出处理uploadForFck.do的方法:

  • 需要使用到工具类UploadResponse

@RequestMapping("/uploadForFck.do")
public void uploadForFck(HttpServletRequest request, HttpServletResponse response) throws IOException { //把request转换成复杂request
MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
//获得文件
Map<String, MultipartFile> map = mr.getFileMap();
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
String fileInputName = it.next();
MultipartFile imgsFile = map.get(fileInputName); //上传文件的名字是不能相同的,因此我们设置一下文件的名称
String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
Random random = new Random();
for(int i = 0; i < 3; i++){
fileName = fileName + random.nextInt(10);
}
//拿到该文件的原始名称
String originalFilename = imgsFile.getOriginalFilename(); //获取该文件的后缀
String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); /***
* 绝对路径是留给页面src属性做显示的
* 相对路径是保存在数据库中,通过input来进行提交的。
*/
//获得上传文件的绝对路径
String realPath = ResourcesUtils.readProp("file_path")+"/upload/"+fileName+suffix;
//获得相对路径
String relativePath = "/upload/"+fileName+suffix; //创建jersy的客户端
Client client = Client.create();
//创建web资源对象
WebResource wr = client.resource(realPath); //拿到文件的二进制数据,使用web资源对象上传
byte[] bytes = imgsFile.getBytes();
wr.put(bytes); /**
* 在FCK中,我们就不再是使用JSON来返回了,我们使用的是内部的对象
*/
UploadResponse ur = new UploadResponse(UploadResponse.EN_OK,realPath);
response.getWriter().print(ur); }

在controller中使用EbItemClob对象,即可接收我们的大字段数据!

     @RequestMapping("/addItem.do")
public void addItem(EbItem ebItem, EbItemClob ebItemClob) { }

移动商城第八篇【添加商品之基本属性和大字段数据(FCK文本编辑器)】的更多相关文章

  1. cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)

    一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql  或者通过一键集成工具 打开mysql命令行  或者mysql 可视化工具 打开命令行 进入这样的界面   不同的机器操作不同 ...

  2. JAVAEE——宜立方商城04:图片服务器FastDFS、富文本编辑器KindEditor、商品添加功能完成

    1. 学习计划 1.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 2.富文本编辑器的使用KindEditor 3.商品添加功能完成 2. 图片服务器的安装 1.存储空间可扩展. 2 ...

  3. 淘淘商城项目_同步索引库问题分析 + ActiveMQ介绍/安装/使用 + ActiveMQ整合spring + 使用ActiveMQ实现添加商品后同步索引库_匠心笔记

    文章目录 1.同步索引库问题分析 2.ActiveM的介绍 2.1.什么是ActiveMQ 2.2.ActiveMQ的消息形式 3.ActiveMQ的安装 3.1.安装环境 3.2.安装步骤 4.Ac ...

  4. 移动商城第四篇【Controller配置、添加品牌之文件上传和数据校验】

    Controller层配置 编写SpringMVC的配置文件 springmvc.xml <?xml version="1.0" encoding="UTF-8&q ...

  5. JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存

    1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 ...

  6. 畅购商城(五):Elasticsearch实现商品搜索

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...

  7. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期

    一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...

  8. 谷粒商城--分布式基础篇P28~P101(完结)

    谷粒商城--分布式基础篇P28~P101(完结) 前面1-27节主要是环境配置特别难,后面的28~101节主要是前端编写的代码较多以及后台的CRUD操作比较多.因为内容很多,所以我是根据自己想学的点进 ...

  9. ssh整合问题总结--在添加商品模块实现图片(文件)的上传

    今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中: 完成这个功能需要两个步,第 ...

随机推荐

  1. 关于error C2872: 'LONG_PTR' : ambiguous symbol

    今天用VS2010创建了一个add-in工程,使用常量INVALID_HANDLE_VALUE时,编译器就提示如下错误: error C2872: 'LONG_PTR' : ambiguous sym ...

  2. 设计模式的征途—20.备忘录(Memento)模式

    相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生.为了不让自己后悔,我们总是需要三思而后行.这里我们 ...

  3. [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示

    javascript面向对象编程方式,对于初学者来说,会比较难懂. 要学会面向对象以及使用面向对象编程,理解对象的创建在内存中的表示,至关重要. 首先,我们来一段简单的对象创建代码 var obj = ...

  4. 关于Java String 类型转换时null的问题

    开发中经常遇到从集合类List.Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPointerException,在此总结一下常用转换为St ...

  5. Linux常见命令(四)——mkdir

    今天我们来介绍第四个命令:mkdir.mkdir (Make Directory 创建目录): 若指定目录不存在则创建目录.在创建目录时,要求创建目录的用户具有写权限,并应保证新建的目录没有重名. 用 ...

  6. koa/redux middleware系统解析

    middleware 对于现有的一些框架比如koa,express,redux,都需要对数据流进行一些处理,比如koa,express的请求数据处理,包括json.stringify,logger,或 ...

  7. 关于makefile中变量的多次赋值以及override指令

    1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影 ...

  8. Cython的用法以及填坑姿势

    因为项目需要,需要优化已有的Python代码.目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层.如果去掉指令解释这个阶段,直接进入C代码层, ...

  9. new和newInstance区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp55     在初始化一个类,生成一个实例的时候:newInstance() ...

  10. js获取地址栏参数数据

    // 获取指定地址栏数据//name:参数名 function GetQueryString(name, url) { var reg = new RegExp("(^|&)&quo ...