21.12 图书管理功能模块
21.12.1 图书管理功能模块
图书管理功能模块的具体功能如下。
图书入库:用于添加图书信息。
图书查询:用于显示图书的基本信息。
图书修改:用于修改图书信息。
图书删除:用于删除图书信息。
库存进入:用于添加图书数目。
库存预警:用户库存不足10本的图书查询。
21.12.2 创建图书的Action实现类
主要技术:继承了DispatchAction类,对图书信息实现多业务操作。
图书功能模块的Action实现类BookAction继承了DispatchAction类,实现多业务操作。在该类中,首先需要在该类属性中实例化图书模块的BookDao类(该类用于实现与数据库的交互)。图书管理模块Action实现类的关键代码如下。
例程21-30:光盘\mr\21\wyBooks\src\com\action\BookAction.java
package com.action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import com.actionForm.BookForm;
import org.apache.struts.actions.DispatchAction;
import com.dao.BookDao;
public class BookAction extends DispatchAction {
private BookDao bookDao = new BookDao();
…… //此处省略了该类中的其他方法,这些方法将在后面的具体过程中给出
}
21.12.3 查看图书信息列表
管理员登录后,选择“图书管理”/“图书查询”菜单项,进入到查看图书列表页面,在该页面中将显示全部图书信息列表,同时提供删除图书信息、修改图书信息及具有分页功能的超链接。查看图书信息列表页面的运行结果如图21.15所示。

图21.15 查看图书信息列表页面的运行结果
1.查询图书信息Action类
打开保存实现半透明背景菜单的全部JavaScript代码的“JS\menu.JS”文件,可以找到如下所示的“图书查询”菜单项的超链接代码。
文件位置
<a href=bookAction.do?method=selectBookAction>图书查询</a>
从上面的URL地址中可以知道,查看图书信息列表模块涉及到的method的参数值为“selectBookAction”,当method=selectBookAction时,会调用BookAction类查看图书信息列表的方法selectBookAction()。查看图书信息列表selectBookAction()方法的关键代码如下。
例程21-31:光盘\mr\21\wyBooks\src\com\action\BookAction.java
public ActionForward selectBookAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
int number = 0;
if (request.getParameter("number") != null) {
number = Integer.parseInt(request.getParameter("number"));
}
request.setAttribute("number", String.valueOf(number));
request.setAttribute("maxPage", String.valueOf(bookDao.selectBook()));
request.setAttribute("list", bookDao.selectBook(number));
/*调用BookDao类中的selectBook()方法*/
return mapping.findForward("selectBookAction");
}
从上面的代码可以知道,查看图书信息列表使用的BookDAO类的方法是selectBook()。selectBook()方法实现的是对数据表的内容进行分段查询。分页查询的业务处理在方法体内进行处理,该方法的代码请读者查看21.9.5节中的相关内容。
2.struts-config.xml文件配置
在struts-config.xml文件中配置查看图书信息列表所涉及的<forward>元素,代码如下。
<action name="bookForm" parameter="method" path="/bookAction" scope="request" type="com.action. BookAction" validate="true">
<forward name="selectBookAction" path="/book/selectBook.jsp"/>
</action>
接下来的工作是将Action实现类中的selectBook ()方法返回的查询结果显示在查看图书信息列表页selectBook.jsp中。在selectBook.jsp中,首先通过request.getAttribute()方法获取查询结果并将其保存在List容器类中,再通过循环将图书信息以列表形式显示在页面中。
21.12.4 添加图书信息
管理员登录系统后,选择“图书管理”/“图书入库”菜单项,进入到添加图书信息的页面。添加图书信息页面的运行结果如图21.16所示。

图21.16 添加图书信息页面的运行结果
1.设计添加图书信息页面
添加图书信息页面主要用于收集输入的图书信息,及通过自定义的JavaScript函数验证输入信息是否合法,该页面中涉及到的表单元素如表21.16所示。
表21.16 添加图书信息页面所涉及的表单元素
|
名 称 |
元 素 类 型 |
重 要 属 性 |
含 义 |
|
form |
form |
method="post" action="bookAction.do?method=insertBookAction" onSubmit="return checkEmpty(form)" |
表单 |
|
hidden |
bookNumber |
value="<%=bookDao.selectMaxIdBook()%>" |
图书编号 |
|
lineNumber |
text |
图书条形码 |
|
|
bookName |
text |
图书名称 |
|
|
author |
text |
图书作者 |
|
|
publish |
text |
出版社名称 |
|
|
publishNumber |
text |
出版次数 |
|
|
sortNumber |
select |
<%List sortList=bookSortDao.selectBookSortList(); for(int sort=0;sort<sortList.size();sort++){ BookSortForm sortForm=(BookSortForm)sortList.get(sort); %> <option value="<%=sortForm.getSortNumber()%>"><%=sortForm.getSortName()%></option> <%}%> |
图书种类编号 |
续表
|
名 称 |
元 素 类 型 |
重 要 属 性 |
含 义 |
|
inPirce |
text |
图书入库价格 |
|
|
singlePirce |
text |
图书售出价格 |
|
|
bookSum |
text |
图书入库数目 |
|
|
man |
hidden |
value="<%=session.getAttribute("account")%>" |
操作员名称 |
|
creatime |
hidden |
value="<%=showTime.showCurrentTime()%>" |
图书入库时间 |
|
Submit2 |
submit |
value="添加" |
【添加】按钮 |
|
Submit |
reset |
value="清除" |
【清除】按钮 |
2.添加图书的Action实现类
在添加图书信息页面中输入合法的图书信息后,单击“添加”按钮,网页会访问一个URL,这个URL是“bookAction.do?method=insertBookAction”。从该URL地址中可以知道添加图书信息模块涉及到的method的参数值为“insertBookAction”,也就是当method= insertBookAction时,会调用BookAction类添加图书信息的方法insertBookAction(),添加图书信息insertBookAction ()方法的关键代码如下。
例程21-32:光盘\mr\21\wyBooks\src\com\action\BookAction.java
public ActionForward insertBookAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
BookForm bookForm = (BookForm) form;
if (bookForm.getAuthor() == null || bookForm.getAuthor().equals("")) {
return mapping.findForward("insertBookAction");
/*当从页面中取得读者(author)信息为null时,进入图书入库页面*/
}
bookForm.setAuthor(bookForm.getAuthor());
bookForm.setBookName(bookForm.getBookName());
bookForm.setBookNumber(bookForm.getBookNumber());
bookForm.setBookSum(bookForm.getBookSum());
bookForm.setCreatime(bookForm.getCreatime());
bookForm.setLineNumber(bookForm.getLineNumber());
bookForm.setInPirce(bookForm.getInPirce());
bookForm.setMan(bookForm.getMan());
bookForm.setPublish(bookForm.getPublish());
bookForm.setPublishNumber(bookForm.getPublishNumber());
bookForm.setSinglePirce(bookForm.getSinglePirce());
bookForm.setSortNumber(bookForm.getSortNumber());
if (bookDao.insertBook(bookForm)) {
request.setAttribute("message", "添加图书信息成功,请继续添加!!!");
} else {
request.setAttribute("message", "添加图书信息失败,请重新添加!!!");
}
/*调用BookDao类,实现图书添加的操作*/
return mapping.findForward("resultBookAction");
}
3.struts-config.xml文件配置
在struts-config.xml文件中配置添加图书信息所涉及的<forward>元素,代码如下。
<forward name="insertBookAction" path="/book/insertBook.jsp"/>
<forward name="resultBookAction" path="/book/insertResultBook.jsp"/>
21.12.5 修改图书信息
管理员登录系统后,选择“图书管理”/“图书查询”菜单项,进入到查看图书列表的页面,在该页面中,单击想要修改的图书信息后面的“修改”超链接,进入到“修改图书信息”页面。修改图书信息页面的运行结果如图21.17所示。

图21.17 修改图书信息页面的运行结果
1.修改图书的Action实现类
在修改图书信息页面中修改图书信息后,单击【修改】按钮,网页会访问一个URL,URL是“bookAction.do?method=updateBookAction&bookNumber=BOOK-19&number=0”。从该URL地址中可以知道保存修改图书信息涉及到的method的参数值为“updateBookAction”,也就是当method= updateBookAction时,会调用bookAction类修改图书信息的方法updateBookAction()。保存修改图书信息的方法updateBookAction()的具体代码如下。
例程21-33:光盘\mr\21\wyBooks\src\com\action\BookAction.java
public ActionForward updateBookAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
BookForm bookForm = (BookForm) form;
if (bookForm.getLineNumber().equals("")) {
bookForm.setBookNumber(request.getParameter("bookNumber"));
request.setAttribute("form", bookDao.selectBook(bookForm));
return mapping.findForward("updateBookAction");
}
bookForm.setAuthor(bookForm.getAuthor());
//此处省略了用相关属性的getXXX方法重新设置该属性的setXXX方法的代码
if (bookDao.updateBook(bookForm)) {
request.setAttribute("result", "修改图书信息成功!!!");
} else {
request.setAttribute("result", "修改图书信息失败!!!");
}
return mapping.findForward("opeationBookAction");
}
2.struts-config.xml文件配置
在struts-config.xml文件中配置修改图书信息页涉及的<forward>元素,代码如下。
<forward name="opeationBookAction" path="/book/operationBook.jsp"/>
<forward name="updateBookAction" path="/book/updateBook.jsp"/>
21.12.6 删除图书信息
管理员登录系统后,选择“图书管理”/“图书查询”菜单项,进入到查看图书列表页面,在该页面中单击想要删除的图书信息后面的“删除”超链接,进入到“删除图书信息”页面。
在“查看图书信息列表”页面中可以找到删除图书信息的超链接代码,如下所示。
<a href="javascript:deleteForm('<%=form.getBookNumber()%>','<%=number%>')">删除</a>
从上面的URL地址可以知道,单击“删除”超级链接触发的是脚本语言,该脚本语言的代码如下。
<script language="javascript">
function deleteForm(date1,date2){
if(confirm("确定删除吗?")){
window.location.href="bookAction.do?method=deleteBookAction&bookNumber="+date1+"&number="+date2;
}
}
</script>
删除图书信息页涉及到的method的参数值为“deleteBookAction”,当method= delete BookAction时,会调用BookAction类删除图书信息的方法deleteBookAction(),关键代码如下。
例程21-34:光盘\mr\21\wyBooks\src\com\action\BookAction.java
public ActionForward deleteBookAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
BookForm bookForm = (BookForm) form;
bookForm.setBookNumber(request.getParameter("bookNumber"));
boolean result = bookDao.deleteBook(bookForm);
if (result) {
request.setAttribute("result", "删除该图书类型成功!!!");
} else {
request.setAttribute("result", "子表中仍然存在该图书的信息,删除该图书类型失败!!!");
}
return mapping.findForward("opeationBookAction");
}






