乐鲜生活后台管理系统--项目总结

  1. 三级联动
    ======

  2. 使用JSON处理数据实现

  3. 前端–使用JQ类库中Ajax异步提交的方式,配合JSON实现

	
			
 2.  对应controller中
/**
 1. Ajax请求得到子类商品信息 post方式,返回类型为json
 2. @return  @ResponseBody注解告诉SpringMVC该方法返回的不是一个视图
 3. method = RequestMethod.POST 此方法只允许以POST形式访问
 4. produces = "application/json;charset=UTF-8" 以JSON形式返回,字符型为UTF-8 不加会是乱码
 */
	@ResponseBody
	@RequestMapping(value = "/findcitysbyparentid.do", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	public List findCitysByParentId(Citys citys) {
		//执行Service层的方法
		List cityslist = this.storeManageService.searchCitysByParentId(citys);
		return cityslist;// 在这里配置文件和jackson工具就自动转化了,直接返回对象即可
	}
 这里需要注意需要倒6个Json.jar包
  1. 使用野路子–拆字符串的方式实现三级联动

  2. 通过拆分字符串的形式来实现三级联动数据–同样使用的JQ中Ajax的$.get


	
2. 对应controller多了合并字符串操作
@RequestMapping(value = "/secondInfo.do", produces = "text/plain;charset=UTF-8")
@ResponseBody // 告诉springMVC返回的不是一个视图
public String selectCommodityInfo(String info) {
	int parentId = Integer.parseInt(info);
	List catList = this.commodityInfoService.selectOtherNameByParentId(parentId);
	String secondName = "";
	for (Category category : catList) {
		secondName = secondName + "#" + category.getId() + ":" + category.getCategoryname();
	}
	secondName = secondName.substring(1, secondName.length());
	return secondName;
}

总结:两种写法都可以实现,JSON高端了很多,这应该也是单位中三级联动的常用写法,拆分字符串体会下也好。

  1. JSP界面显示上传图片
    =======
    概述:在当前JSP界面显示上传图片,并不提交到后台而是在网页上显示上传的图片。
    —使用javascript实现
//使用通过拼接ID名字来获取不同ID达到使用不同对象
function setImagePreview(avalue) {
		var docObj = document.getElementById("doc" + avalue);
		//这里可以把docObj.files看成数组-->存在-->true
		//这里可以把docObj.files[0]看成数组中第一个元素-->存在-->true
		//两者都为真是--才执行
		if (docObj.files && docObj.files[0]) { 
			if(avalue == 1){
				var imgObjPreview = document.getElementById("preview" + avalue);
				//火狐下,直接设img属性
				imgObjPreview.style.display = 'block';
				imgObjPreview.style.width = '230px';
				imgObjPreview.style.height = '280px';
				//imgObjPreview.src = docObj.files[0].getAsDataURL();
				//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
				imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
			}else if (avalue == 2) {
				for(var i=0;i

对应的file标签

商品主图:
//${commodity.pictureurl}为项目中的原图片
  1. 使用JQ添加删除HTML元素
    =================
    概述:使用JQ中的append添加属性,并且标签中带有删除此标签的button
    1.JQ部分

注意:java长使用hidden来记录被删除掉的数据,来实现form表单提交与后台交互

2.页面部分

规格信息:规格组: 规格名:
${key.specGroup}:${key.specName}
  1. SpringMVC中文件的上传下载
    =======
    概述:做到多文件的上传下载,以及表单提交数据更新,只使用一次表单提交

1.JSP界面



商品配图:
<%int i = 10;%>
<%i++;%>

2.对应controller

/**
 *@RequestParam MultipartFile[] myfiles 
 *myfiles 为JSP界面中对应file标签的name ---> 是一个数组
 *@RequestParam 根据name捕获
 */
@RequestMapping("/updateCommodityInfo.do")
public String upload(@RequestParam MultipartFile[] myfiles, HttpServletRequest request) throws IOException {
	/**
	 * 因为请求被enctype="multipart/form-data"变为二进制,需要使用springMVC中的
	 * MultipartHttpServletRequest 类对request进行强转,
	 * 这里使用multiRequest 获得的表单提交的数据都是multiRequest在请求头中以二进制进行转码获得的数据
	 */	
	MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
	//多张图片存在配图--在这里捕获配图名存到assiFile 这个集合中
	List assiFile = new ArrayList();
	//获取主图文件名
	String pictureurl = multiRequest.getParameter("pictureurl");
	//去掉fakepath获取主图文件名
	pictureurl = pictureurl.substring(pictureurl.lastIndexOf("\\") + 1, pictureurl.length());
	//获取服务器保存图片的路径
	String urlPath = request.getSession().getServletContext().getRealPath("commodity") + File.separator;
	for (MultipartFile file : myfiles) {
		// 此处MultipartFile[]表明是多文件,如果是单文件MultipartFile就行了
		if (file.isEmpty()) {
			System.out.println("文件未上传!");
		} else {
			// 得到上传的文件名
			String fileName = file.getOriginalFilename();
			if (fileName.indexOf(pictureurl) == -1) {
				assiFile.add(fileName);
			}
			// 服务器路径+图片名 图片的保存地址和文件名
			String path = urlPath + fileName;
			// 查看文件上传路径,方便查找,把文件上传至path的路径
			File localFile = new File(path);
			//写入
			file.transferTo(localFile);
		}
	}
}

注意:在request中获得文件路径为伪路径,获取真实路径需要在JS中操作,在controller中获得的是C://fakepath/xxxxx.jpg

  1. 关于form表单提交乱码问题
    =================

概述:在web.xml中配置拦截器filter过滤器,一次性解决,不需要使用String–byte[]单句转换

 
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    characterEncodingFilter
    /*
  
  单句转换方式
//先将字符转成最小字符格式iso-8859-1----再转成支持中文的utf-8
info = new String(info.getBytes("iso-8859-1"), "utf-8");

注意:使用配置filter过滤器必须以POST形式提交,GET还需要手动转码,配置是注意将filter配置文件放在上面。

你可能感兴趣的:(项目总结)