实习课知识整理4:点击某个商品如何跳转到并展示出商品详情页

项目情景:当我们点击某个商品时,我们需要查看商品的具体的信息并进行购买的操作

简单理解以下就是,当我们点击一个url链接时,该链接需要携带一个参数到后端,一般设为商品的Id,然后后端通过Id从数据库中查找商品的具体的信息,并将信息返回到商品的详情页上。

1. 后端编写根 据id查询的方法

ItemMapper.java

    // 通过itemId查询
    Item getItemById(Integer itemId);

ItemMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.shopping.mapper.ItemMapper">

    <resultMap id="itemBaseResultMap" type="Item">
        <!-- 映射字段 -->
        <id column="ITEM_ID" property="itemId"/>
        <id column="ITEM_NAME" property="itemName"/>
        <id column="ITEM_PRICE" property="itemPrice"/>
        <id column="ITEM_COUNT" property="itemCount"/>
        <id column="ITEM_CREATE_TIME" property="itemCreateTime"/>
        <id column="ITEM_DESC" property="itemDesc"/>
        <id column="ITEM_TYPE_ID" property="itemTypeId"/>
        <id column="ITEM_SALE_PRICE" property="itemSalePrice"/>
        <id column="ITEM_STATE" property="itemState"/>
        <id column="ITEM_IMAGE_MAIN" property="itemImageMain"/>
        <id column="ITEM_IMAGE_OTHER" property="itemImageOther"/>
        <id column="ITEM_VIDEO_URL" property="itemVideoUrl"/>
        <id column="ITEM_HEART" property="itemHeart"/>
    </resultMap>

    <!--编写Sql代码块,便于多次使用-->
    <sql id="allColumns">
        select ITEM_ID, ITEM_NAME, ITEM_PRICE, ITEM_COUNT, ITEM_CREATE_TIME, ITEM_DESC,
        ITEM_TYPE_ID, ITEM_SALE_PRICE, ITEM_STATE, ITEM_IMAGE_MAIN, ITEM_IMAGE_OTHER,
        ITEM_VIDEO_URL, ITEM_HEART from shopping.item
    </sql>


    <select id="getItemById" resultMap="itemBaseResultMap">
        <include refid="allColumns"></include> WHERE ITEM_ID = #{itemId}
    </select>

</mapper>

 

ItemService.java接口 

    // 通过itemId查询
    Item getItemById(Integer itemId);

ItemServiceImpl实现类

    @Override
    public Item getItemById(Integer itemId) {
        return itemMapper.getItemById(itemId);
    }

因为商品的详情页需要哦展示多张的缩略图,而缩略图是以字符串的形式,中间以空格隔开,存在数据库中的 

    @Override
    public Item getItemById(Integer itemId) {
        return itemMapper.getItemById(itemId);
    }

    // 图片地址解析
    @Override
    public List<String> dealItemImageOther(String itemImageOther) {
        if (null == itemImageOther) {
            return null;
        } else {
            itemImageOther = itemImageOther.trim();  // 去掉字符串前后的空格
            String[] imagesUrl = itemImageOther.split(" ");
            List<String> urlList = new ArrayList<>();
            for (String url : imagesUrl) {
                urlList.add(url);
            }
            return urlList;
        }
    }

 

ItemController

    @Autowired
    ItemService itemService;

    @GetMapping("/toItemInfo/{itemId}")
    public ModelAndView toItemInfo(ModelAndView mav, @PathVariable("itemId") Integer itemId) throws Exception {
        Item item = itemService.getItemById(itemId);

        // 缩略图解析
        List<String> urlList = itemService.dealItemImageOther(item.getItemImageOther());

        mav.addObject("item", item);
        mav.addObject("urlList", urlList);

        mav.setViewName("itemInfo");

        return mav;
    }

 

index.html页面需要传递item.id 

 

2. 前端在对应的itemInfo.html页面接收到数据,并进行处理 

<div class="itemContent">
        <!--商品图片、视频显示区域-->
        <div id="showItem">
            <div id="showOne">
                <!--商品视频显示-->
                <video id="itemVideo" th:src="${item.itemVideoUrl}" controls autoplay="true"></video>
                <!--显示大图  需要和商品视频区域重叠-->
                <div id="showImg">
                    <img id="imgBig" src="http://localhost:8082/project/images/girl.jpg"/>
                </div>
            </div>
            <!--显示多个缩略图-->
            <div id="otherImage">
                <div th:each="url:${urlList}">
                    <img th:src="${url}" class="imgSmall"/>
                </div>
            </div>
        </div>
        <!--商品信息显示区域-->
        <div id="showInfo">
            <div id="title">
                <span>商品名:</span><span th:text="${item.itemName}"></span>
            </div>
            <div id="price">
                <span>商品价格:</span><span th:text="${item.itemPrice}"></span>
            </div>
            <div>
                <!--<form>-->
                <!--有些关键数据,不需要用户填写,但是后面功能需要,可以使用hidden的input 传递-->
                <input type="hidden" name="itemId" th:value="${item.itemPrice}"/>
                <span>购买数量</span><input type="text" name="buyCount" value="1"/><br/>
                <button id="buyButton">直接购买</button><br/>
                <!--</form>-->
            </div>
        </div>
    </div>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小蟹呀^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值