(三)查看图书详细信息

需要注意的三点:

1. 查看图书的详细信息:

1). 在超链接后附带 id.

<a href="bookServlet?method=getBook&pageNo=${bookpage.pageNo }&id=${book.id}">${book.title }</a>

2). 对从页面传入的请求参数, 若要求改该请求参数为整型的字符串, 类似于 "1". 在 Controller 中的建议处理方案:

int id = -1;
try {
id = Integer.parseInt(idStr);
} catch (NumberFormatException e) {}

if(id > 0)
book = bookService.getBook(id);

3). 查询条件的隐藏域和 JS 代码的可重用性解决方案: 把相同的代码放到一个 JSP 中, 各个页面包含该 JSP 即可:

<%@ include file="/commons/queryCondition.jsp" %>

2.具体实现代码

BookServlet.java

package com.aff.bookstore.servlet;

import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.aff.bookstore.domain.Book;
import com.aff.bookstore.service.BookService;
import com.aff.bookstore.web.CriteriaBook;
import com.aff.bookstore.web.Page;

@WebServlet("/bookServlet")
public class BookServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    private BookService bookService = new BookService();

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String methodName = request.getParameter("method");
        try {
            Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
                    HttpServletResponse.class);
            method.setAccessible(true);
            method.invoke(this, request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void getBook(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String idStr = request.getParameter("id");
        int id = -1;
        Book book = null;

        try {
            id = Integer.parseInt(idStr);
        } catch (NumberFormatException e) {}

        if (id>0) {
            book = bookService.getBook(id);
            if (book == null) {
                response.sendRedirect(request.getContextPath() + "/errror-1.jsp");
                return;
            }
        }
        request.setAttribute("book", book);
        request.getRequestDispatcher("/WEB-INF/pages/book.jsp").forward(request, response);
    }

    protected void getBooks(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String pageNoStr = request.getParameter("pageNo");
        String minPriceStr = request.getParameter("minPrice");
        String maxPriceStr = request.getParameter("maxPrice");

        int pageNo = 1;
        int minPrice = 0;
        int maxPrice = Integer.MAX_VALUE;
        try {
            pageNo = Integer.parseInt(pageNoStr);
        } catch (Exception e) {
        }
        try {
            minPrice = Integer.parseInt(minPriceStr);
        } catch (Exception e) {
        }
        try {
            maxPrice = Integer.parseInt(maxPriceStr);
        } catch (Exception e) {
        }
        CriteriaBook criteriaBook = new CriteriaBook(minPrice, maxPrice, pageNo);
        Page<Book> page = bookService.getPage(criteriaBook);

        request.setAttribute("bookpage", page);
        request.getRequestDispatcher("/WEB-INF/pages/books.jsp").forward(request, response);
    }
}

book.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="script/jquery-1.12.3.js"></script>

<!-- 重用之前写的js和参数的隐藏域 -->
<%@include file="/commons/queryCondition.jsp" %>
</head>
<body>

    <center>
     
        <br> <br>
        Title: ${book.title}
        <br> <br>
        Author: ${book.author}
        <br> <br>
        Price: ${book.price}
        <br> <br>
        PublishingDate: ${book.publishingDate}
        <br> <br>
        Remark: ${book.remark}
        <br> <br>
        <a href="bookServlet?method=getBooks&pageNo=${param.pageNo}"> 继续购物</a>
           
    </center>
</body>
</html>

queryCondition.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <script type="text/javascript">
         $(function(){
             $("a").click(function(){
                 var serializeVal = $(":hidden").serialize();
                 var href = this.href+"&"+serializeVal;
                 window.location.href = href;
                 return false; 
             });
        });  
</script>
    
    <input type="hidden" name="minPrice"  value="${param.minPrice}"/>
    <input type="hidden" name="maxPrice"  value="${param.maxPrice}"/>
    

实现效果如下

猜你喜欢

转载自www.cnblogs.com/afangfang/p/12907999.html