展示规格参数:
首先分析一下,我们需要怎么去获取商品的规格参数,我们可以根据商品的id来查询商品的规格参数,取出来之后,可以采用html页面展示的方法来展示商品的规格参数。
Dao层:
根据商品的id;来查询对应的规格参数,其是一种单表查询操作,所以我们可以使用逆向工程生成的代码;
Servcie层:
service层实现的是上面分析的内容,通过接收商品的id来返回规格参数,并生成和返回html。
新声明一个接口,专门用于上面的功能需求:
public interface ItemParamItemService {
String getItemParamByItemId(long itemId);
}
之后,按照分析的不执行后编写实现类:
public class ItemParamItemServiceImpl implements ItemParamItemService {
@Autowired
private TbItemParamItemMapper itemPramItemMapper;
@Override
public String getItemParamByItemId(long itemId) {
// TODO Auto-generated method stub
TbItemParamItemExample example = new TbItemParamItemExample();
//添加执行条件
Criteria criteria = example.createCriteria();
criteria.andItemIdEqualTo(itemId);
//执行查询
List<TbItemParamItem> list = itemPramItemMapper.selectByExampleWithBLOBs(example);
if(list == null || list.size() == 0){
return "";
}
TbItemParamItem itemParamItem = list.get(0);
String paramData = itemParamItem.getParamData();
//生成html
//把json数据转换成java对象
List<Map> paramList = JsonUtils.jsonToList(paramData, Map.class);
//将参数信息转换成html
StringBuffer sb = new StringBuffer();
//sb.append("<div>");
sb.append("<table cellpadding=\"0\" cellspacing=\"1\" width=\"100%\" border=\"1\" class=\"Ptable\">\n");
sb.append(" <tbody>\n");
for (Map map : paramList) {
sb.append(" <tr>\n");
sb.append(" <th class=\"tdTitle\" colspan=\"2\">"+map.get("group")+"</th>\n");
sb.append(" </tr>\n");
List<Map> params = (List<Map>) map.get("params");
for (Map map2 : params) {
sb.append(" <tr>\n");
sb.append(" <td class=\"tdTitle\">"+map2.get("k")+"</td>\n");
sb.append(" <td>"+map2.get("v")+"</td>\n");
sb.append(" </tr>\n");
}
}
sb.append(" </tbody>\n");
sb.append("</table>");
return sb.toString();
}
}
Controller层:
接收商品的id作为参数,调用service查询规格信息,得到规格参数的html;返回一个逻辑视图,将这个html展示到页面。
@Controller
public class ItemParamItemController {
@Autowired
private ItemParamItemService itemParamService;
@RequestMapping("/item/{itemId}")
public String showItemParam(@PathVariable Long itemId, Model model){
String string = itemParamService.getItemParamByItemId(itemId);
model.addAttribute("itemParam",string);
return "item";
}
}
返回值为“item”,这需要我们提供一个item.jsp页面。
在body标签中引用取出来的参数就可以了。
测试结果:
补充:如何拼接html?
首先,我们分析储存在数据库中的表格中的内容:
上面的结果,我们首先会获取html。分析可以了解到里面的很多内容是可以通过循环或者换i迭代获取所有内容的,所以我们可以迭代获取内容,具体如何去做呢,这需要根据数据库中储存的字段,以及存储的json数据格式(map形式),从而确定如何去获取。
规格参数列表的实现:
需求分析:
当我们点击获取参数列表的页面时,需要弹出一个jsp页面,所以请求的路径为:/item/param/list;
其实与之前做的商品的查询,并分页有些类似,在这里我们也可以增加分页的功能;对于返回值,还是使用自定义的消息响应类。同时,在合理可以看一下jsp页面可以发现,我们是使用EasyUI来展示的,所以我们还是需要使用EasyUI来进行处理。
Dao层:
通过分析,可以了解到,查询的内容都来自于一个表格,可以使用mybatis逆向工程生成的代码。
Service层:
在接口中定义新的业务逻辑接口:
实现这个接口:
public EUDataGridResult getItemParamList(Integer page, Integer rows) throws Exception {
// 分页处理
PageHelper.startPage(page, rows);
//查询规格表
List<TbItemParam> list = itemParamMapper.selectByExampleWithBLOBs(new TbItemParamExample());
//获取分页信息
//返回结果
EUDataGridResult result = new EUDataGridResult();
result.setRows(list);
PageInfo<TbItemParam> pageInfo = new PageInfo<>(list);
result.setTotal(pageInfo.getTotal());
return result;
}
下面需要修改Controller层:
Controller层:
在接口ItemParamController中增加对页面你的调用: @RequestMapping("/list")
@ResponseBody
public EUDataGridResult getItemParamList(@RequestParam(defaultValue = "1") Integer pages,
@RequestParam(defaultValue = "1") Integer rows) throws Exception{
EUDataGridResult result = itemParamService.getItemParamList(pages, rows);
return result;
}
这样后端的业务逻辑基本处理好了。转回页面:
测试一下:
测试成功!