电商模块开发-第七天

这一生的挚爱 提交于 2019-12-02 18:11:34

第一个功能:实现商品的预览功能。今天换一种方式,之前都是从持久层往前端写,现在从前端的请求开始往后写,可能易于理解。

  • 从前端传送过来的请求
<a href="<c:url value="/list?method=preArticle&id=${a.id }"/>"> //附带了商品的id
  •  servlet的处理
public void preArticle() throws ServletException, IOException {
        String id=request.getParameter("id");
        Article article=service1.getById(id);
        article.setDiscount(8.8);
        request.setAttribute("article",article);
        request.getRequestDispatcher("/WEB-INF/jsp/preArticle.jsp").forward(request,response);
    }
  • 业务层接口的实现类的处理
public Article getById(String id) {
        return articleDao.selectById(id);
    }
  • 持久层
DAO层的接口
public Article selectById(String id);

DAO层的实现
<select id="selectById" resultMap="resultMap">
    select * from ec_article where id=#{id}
</select>

在preArticle.jsp中,将article中的内容做展示就可以了。

第二个功能:

修改商品信息

  • 接受前端传过来的请求
<a class="label label-success" href="<c:url value="/list?method=showUpdate&id=${a.id }&typeCode=${typeCode}&secondType=${secondType}&title=${title}"/>">修改</a>
  •  需要一个修改的页面,由showUpdate()方法完成该页面上商品的信息展示。在要修改的页面上有一项是要显示该商品所属的类别,而在商品表中有的只是typecode,靠它与商品类表的code关联,所以现在要做的就是根据他们的关联的关系,由商品的typecode来查询出商品所属类别。
  • 可是我们有不想查询出来一堆没有意义的商品类型的code(是用00010001表示),我们希望看到的是商品类型的name。
  • 商品表与商品类型的表是一对多的关系。我们在 Class Article 中添加属性ArticleType(商品类型表所对应的实体类)
  • 再次重申:我们希望通过id查询商品的同时,能够将商品的全部类型名称查出来,为了完成这个操作,需要在DAO层的实现类中添加内容
<mapper namespace="per.lc.sms.dao.ArticleDao">
    <resultMap id="resultMap" type="Article">
        <result property="putAwayDate" column="PUTAWAY_DATE"/>
        <result property="dateTime" column="CREATE_DATE"/>
        <association property="articleType" javaType="ArticleType" column="TYPE_CODE" select="per.lc.sms.dao.ArticleTypeDao.selectByTypeCode"/> </resultMap>//per.lc.sms.dao.ArticleTypeDao.selectByTypeCode 表示在per.lc.sms.dao包下ArticleTypeDao类中的一个selectByTypeCode()方法,它会由TYPE_CODE查询到对应的ArticleType类,然后映射到articleType。
  • servlet处理
public void showUpdate() throws ServletException, IOException {
        String id=request.getParameter("id");
        Article article=service1.getById(id);
        request.setAttribute("article",article);
        request.getRequestDispatcher("/WEB-INF/jsp/updateArticle.jsp").forward(request,response);
    }

 

  • updateArticle.jsp,下面这条语句就将该商品所属的类型的name显示出来了。
<input type=text value="${article.articleType.name}" class="form-control" readonly="readonly" size="50">
  •  将请求发送到servlet下的updateArticle()
<form name="articleform" class="form-horizontal" action="${pageContext.request.contextPath}/list?method=updateArticle"
  •  updateArticle()
public void updateArticle() throws ServletException, IOException {    //接受页面传过来的数据
        String title=request.getParameter("titleStr");
        String supplier=request.getParameter("supplier");
        String locality=request.getParameter("locality");
        String price=request.getParameter("price");
        String storage=request.getParameter("storage");
        String description=request.getParameter("description");
        String id=request.getParameter("id");
        String picUrl=request.getParameter("picUrl"); //修改之前的图片名。

        //如果用户没有上传图片,使用修改之前的图片名
        try{
            //接收上传图片
            Part part=request.getPart("image"); //若image为空,异常将会被捕获,后面的代码也能够执行。
            //获取项目路径中
            String sysPath=request.getSession().getServletContext().getRealPath("/resources/images/article");
            //为文件命名
            String file=UUID.randomUUID().toString();
            //需要拿到文件的格式
            String contentDisposition = part.getHeader("content-disposition");       //拿到图片的后缀
            String suffix=contentDisposition.substring(contentDisposition.lastIndexOf("."),contentDisposition.length()-1);       //拼接
            String fileName=file+suffix;
            //将其放在目录下
            part.write(sysPath+"/"+fileName);
            picUrl=fileName;
        }catch (Exception e){
            e.printStackTrace();
        }
        Article article=new Article();
        article.setTitle(title);
        article.setSupplier(supplier);
        article.setPrice(Double.parseDouble(price));
        article.setLocality(locality);
        article.setStorage(Integer.parseInt(storage));
        article.setDescription(description);
        article.setId(Integer.parseInt(id));
        article.setImage(picUrl);
        service1.update(article); //执行修改的方法
        showUpdate(); //回调展示页面
    }
  •  持久层动态sql的实现
 <update id="update" >
        update ec_article set
        <if test="title!=null">title=#{title},</if>
        <if test="supplier!=null">supplier=#{supplier},</if>
        <if test="price!=null">price=#{price},</if>
        <if test="image!=null">image=#{image},</if>
        <if test="locality!=null">locality=#{locality},</if>
        <if test="storage!=null">storage=#{storage},</if>
        <if test="description!=null">description=#{description}</if>
        where id=#{id}
    </update>

 业务层的实现类

public void update(Article article) {
        articleDao.update(article);
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!