newstyles项目实战(十二)规格参数展示

展示规格参数:

首先分析一下,我们需要怎么去获取商品的规格参数,我们可以根据商品的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;
	}
   这样后端的业务逻辑基本处理好了。转回页面:


测试一下:

测试成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值