三级联动
======
使用JSON处理数据实现
前端–使用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包
使用野路子–拆字符串的方式实现三级联动
通过拆分字符串的形式来实现三级联动数据–同样使用的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高端了很多,这应该也是单位中三级联动的常用写法,拆分字符串体会下也好。
//使用通过拼接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}为项目中的原图片
注意:java长使用hidden来记录被删除掉的数据,来实现form表单提交与后台交互
2.页面部分
规格信息:规格组:
规格名:
${key.specGroup}:${key.specName}
1.JSP界面
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
概述:在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配置文件放在上面。