<!--搜索页面:search.jsp--!>
<s:form action="search" method="post">
<s:select list="{'书名','作者','出版社'}" headerKey="-1"
headerValue="选择分类" name="search.searchType" />
<s:textfield style="width:150px" name="search.inputSearchInfo" value="请输入关键字查询信息" />
<s:submit value="搜索"/>
</s:form>
<!--搜索显示页面:searchResult.jsp--!>
<div id="rightSearch">
<p>显示查询结果</p>
<s:iterator value="#session.page.list" status="status">
<table width="495" border="0">
<tr>
<td width="140" rowspan="8"><a href="#"><img
src='../images/<s:property value="bookPicture"/>' /> </a>
</td>
<td><s:property value="bookName" /></td>
</tr>
<tr>
<td>作者:<s:property value="bookAuthor" />
</td>
</tr>
<tr>
<td>出版社:<s:property value="bookPress" /></td>
</tr>
<tr>
<td>类别:<s:property value="bookType" />
</td>
</tr>
<tr>
<td>出版时间:<s:property value="bookPublishTime" />
</td>
</tr>
<tr>
<td>图书简介:<s:property value="bookRemark" />
</td>
</tr>
<tr>
<td>现价:<s:property value="bookPrice" />
</td>
</tr>
<tr>
<td><a href="#">加入购物车</a> <a href="#">购买</a>
</td>
</tr>
</table>
<hr />
</s:iterator>
<span>
共<s:property value="#session.page.rowTotalNum"/>记录
共<s:property value="#session.page.pageTotalNum"/>页
第<s:property value="#session.page.currentPage"/>页
<!-- 用url传递中文参数, 必须设置编码,可以将Tomcat的默认编码设为UTF-8而不是utf-8,在server.xml中修改如下-->
<!-- <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/> -->
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=1&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">首页</a>
<s:if test="#session.page.currentPage==1">
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=<s:property value="#session.page.currentPage-1"/>&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">最前一页</a>
</s:if>
<s:else>
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=<s:property value="#session.page.currentPage-1"/>&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">上一页</a>
</s:else>
<s:if test="#session.page.currentPage==#session.page.pageTotalNum">
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=<s:property value="#session.page.pageTotalNum"/>&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">最后一页</a>
</s:if>
<s:else>
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=<s:property value="#session.page.currentPage+1"/>&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">下一页</a>
</s:else>
<a href="http://192.168.0.5:8080/BookStore/search.action?pageNo=<s:property value="#session.page.pageTotalNum"/>&&search.searchType=<s:property value="#session.searchType"/>&&search.inputSearchInfo=<s:property value="#session.inputSearchInfo"/>">末页</a>
</span>
</div>
//实体类:Book.java
package entity;
import java.sql.Date;
public class Book {
private int bookId;
private String bookNumber;
private String bookName;
private String bookAuthor;
private String bookPress;
private String bookPicture;
private int bookAmount;
private String bookType;
private double bookPrice;
private String bookRemark;
private int bookSales;
private Date bookPublishTime;
public int getBookId(){
return bookId;
}
public void setBookId(int bookId){
this.bookId = bookId;
}
public String getBookName(){
return bookName;
}
public void setBookName(String bookName){
this.bookName = bookName;
}
public String getBookNumber(){
return bookNumber;
}
public void setBookNumber(String bookNumber){
this.bookNumber = bookNumber;
}
public String getBookAuthor(){
return bookAuthor;
}
public void setBookAuthor(String bookAuthor){
this.bookAuthor = bookAuthor;
}
public String getBookPress(){
return bookPress;
}
public void setBookPress(String bookPress){
this.bookPress = bookPress;
}
public String getBookPicture(){
return bookPicture;
}
public void setBookPicture(String bookPicture){
this.bookPicture = bookPicture;
}
public int getBookAmount(){
return bookAmount;
}
public void setBookAmount(int bookAmount){
this.bookAmount = bookAmount;
}
public String getBookType(){
return bookType;
}
public void setBookType(String bookType){
this.bookType = bookType;
}
public double getBookPrice(){
return bookPrice;
}
public void setBookPrice(double bookPrice){
this.bookPrice = bookPrice;
}
public String getBookRemark(){
return bookRemark;
}
public void setBookRemark(String bookRemark){
this.bookRemark = bookRemark;
}
public int getBookSales(){
return bookSales;
}
public void setBookSales(int bookSales){
this.bookSales = bookSales;
}
public Date getBookPublishTime(){
return bookPublishTime;
}
public void setBookPublishTime(Date bookPublishTime){
this.bookPublishTime = bookPublishTime;
}
}
//Search.java
package entity;
public class Search{
private String searchType;
private String inputSearchInfo;
public String getSearchType(){
return searchType;
}
public void setSearchType(String searchType){
this.searchType = searchType;
}
public String getInputSearchInfo(){
return inputSearchInfo;
}
public void setInputSearchInfo(String inputSearchInfo){
this.inputSearchInfo = inputSearchInfo;
}
}
//Page.java
[code=Java]package entity;
import java.util.List;
public class Page {
@SuppressWarnings("rawtypes")
private List list; //存放一页的记录
private int currentPage; //当前页
private int pageSize; //每一页的记录数
private int pageTotalNum; //总页数
private int rowTotalNum; //总记录数
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageTotalNum() {
return pageTotalNum;
}
public void setPageTotalNum(int pageTotalNum) {
this.pageTotalNum = pageTotalNum;
}
public int getRowTotalNum() {
return rowTotalNum;
}
public void setRowTotalNum(int rowTotalNum) {
this.rowTotalNum = rowTotalNum;
}
@SuppressWarnings("rawtypes")
public List getList(){
return list;
}
@SuppressWarnings("rawtypes")
public void setList(List list) {
this.list = list;
}
public int countPageTotalNum(int rowTotalNum,int pageSize){
return pageTotalNum=((rowTotalNum-1+pageSize)/pageSize);
}
public int countFrom(int pageNo,int pageSize){ //计算一页开始记录数
return (pageNo-1)*pageSize;
}
public int countTo(int pageNo,int rowTotalNum,int pageSize){ //计算一页终止记录数
if(pageNo != pageTotalNum)
{
return pageNo*pageSize;
}else{
return rowTotalNum;
}
}
public int countCurrentPage(int pageNo){
if(pageNo<1) //如果当前页面数小于1,则设当前页面数为1
{
pageNo = 1;
}
if(pageNo>pageTotalNum) //如果当前页面数大于总页面数,则设当前页面数为总页面数
{
pageNo = pageTotalNum;
}
return pageNo;
}
}
//DAO层:UserDAO.java
public List<Book> searchBook(Search search) {
String sql = null;
String bookName = "书名";
String bookAuthor = "作者";
String bookPress = "出版社";
List<Book> books = new ArrayList<Book>();
con = DatabaseDAO.getCon();
if (search.getSearchType().compareTo(bookName) == 0) {
sql = "select * from book where bookName like '%"
+ search.getInputSearchInfo()
+ "%' order by bookId asc";
} else if (search.getSearchType().compareTo(bookAuthor) == 0) {
sql = "select * from book where bookAuthor like '%"
+ search.getInputSearchInfo()
+ "%' order by bookId asc";
} else if (search.getSearchType().compareTo(bookPress) == 0) {
sql = "select * from book where bookPress like '%"
+ search.getInputSearchInfo()
+ "%' order by bookId asc";
}
if (sql != null) {
try {
pt = con.prepareStatement(sql);
rs = pt.executeQuery();
while (rs.next()) {
Book book = new Book();
book.setBookId(rs.getInt("bookId"));
book.setBookNumber(rs.getString("bookNumber"));
book.setBookName(rs.getString("bookName"));
book.setBookAuthor(rs.getString("bookAuthor"));
book.setBookPress(rs.getString("bookPress"));
book.setBookPicture(rs.getString("bookPicture"));
book.setBookAmount(rs.getInt("bookAmount"));
book.setBookType(rs.getString("bookType"));
book.setBookPrice(rs.getDouble("bookPrice"));
book.setBookRemark(rs.getString("bookRemark"));
book.setBookSales(rs.getInt("bookSales"));
book.setBookPublishTime(rs.getDate("bookPublishTime"));
books.add(book);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DatabaseDAO.closeRs(rs);
DatabaseDAO.closePt(pt);
DatabaseDAO.closeCon(con);
}
return books;
} else {
return null;
}
}
//Service层:SearchService.java
package service;
import java.util.List;
import dao.UserDAO;
import entity.Book;
import entity.Page;
import entity.Search;
public class SearchService {
private List<Book> books;
private Book book;
private Search search;
private Page page;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public Search getSearch(){
return search;
}
public void setSearch(Search search){
this.search = search;
}
public List<Book> getBooks(){
return books;
}
public void setBooks(List<Book> books){
this.books = books;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public Page getPage(int pageNo,int pageSize,Search search) throws Exception{
UserDAO userDao = new UserDAO();
Page page = new Page();
List<Book> books = userDao.searchBook(search);
int rowTotalNum = books.size(); //获取总记录数
int pageTotalNum = page.countPageTotalNum(rowTotalNum, pageSize); //获取总页面数
int currentPage = page.countCurrentPage(pageNo); //获取当前页
int from = page.countFrom(currentPage, pageSize); //获取一页起始记录
int to = page.countTo(currentPage, rowTotalNum,pageSize); //获取一页终止记录
books = books.subList(from, to); //从总记录中截取一页的显示记录(包含from不包含to)
//将数据进行封装
page.setPageSize(pageSize);
page.setCurrentPage(currentPage);
page.setRowTotalNum(rowTotalNum);
page.setPageTotalNum(pageTotalNum);
page.setList(books); //将截取的记录保存
return page;
}
}
//Action类:SearchAction.java
package com.bs.action;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import service.SearchService;
import com.opensymphony.xwork2.ActionSupport;
import entity.Page;
import entity.Search;
public class SearchAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Search search;
private Page page;
private int pageNo=1; //默认当前页为第一页
private int pageSize = 5; //每页显示5条记录
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public Search getSearch() {
return search;
}
public void setSearch(Search search) {
this.search = search;
}
public String search() throws Exception{
SearchService searchService = new SearchService();
page = searchService.getPage(pageNo, pageSize,search); //获取page
HttpSession session = ServletActionContext.getRequest().getSession();
//将数据用session保存
session.setAttribute("page", page);
session.setAttribute("searchType", search.getSearchType());
session.setAttribute("inputSearchInfo", search.getInputSearchInfo());
return SUCCESS;
}
}