做struts2作业写书籍的增删改查,运用JDBC连接数据库,在写到通过id删除一条记录时,遇到了下列问题
代码如下,模型就不上代码了
<body>
<table border="1px">
<tr><th>ID</th><th>书名</th><th>价格</th><th>作者</th><th>出版社</th></tr>
<c:forEach var="map" items="${booklist}" begin="0" varStatus="st">
<tr bgcolor="${st.index % 2 == 1 ? '#EFEFEF' : 'FFFFFF'}">
<td>${map.id}</td>
<td>${map.bookname}</td>
<td>${map.bookprice}</td>
<td>${map.bookauthor}</td>
<td>${map.bookpublisher}</td>
<td><a href="prepareUpdate_BookAction?id=${map.id}">修改</a></td>
<td><a href="delete_BookAction?id=${map.id}">删除</a></td>
</tr>
</c:forEach>
</table>
<s:debug/>
</body>
点击删除超链接,交给delete_BookAction处理,下面是Action的处理方法
public class BookAction extends ActionSupport {
BookService bookservice = new BookService();
private Book book;
private int id;
private List<Book> booklist;
public List<Book> getBooklist() {
return booklist;
}
public void setBooklist(List<Book> booklist) {
this.booklist = booklist;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
*
* @return
*/
public String prepareDeleteBook(){
ActionContext.getContext().put("booklist", new BookService().listBooks());
return "showDeleteBookList";
}
/**
*
* @return
*/
public String prepareUpdateBook(){
book = bookservice.getBook(id);
//ActionContext.getContext().put("booklist",bookservice.getBook(id));
return "showUpdateBookList";
}
public String addBook(){
System.out.println(book.getBookauthor());
bookservice.insertBook(book);
ActionContext.getContext().put("booklist", new BookService().listBooks());
System.out.println("添加成功");
return "addbookOK";
}
public String deleteBook(){
bookservice.deleteBook(id);
System.out.println(id);
return "deleteOK";
}
public String updateBook(){
ActionContext ac = ActionContext.getContext();
bookservice.updateBook(book);
return "updateOK";
}
public String selectBook(){
//bookservice.listBooks();
ActionContext.getContext().put("booklist", new BookService().listBooks());
return "selectOK";
}
//此处要实现ModelDriven<Book>接口
// @Override
// public Book getModel() {
// return book;
// }
}
struts.xml配置文件
<action name="*_*Action" class="action.{2}Action" method="{1}{2}">
<!-- User result -->
<param name="savepath">f:</param>
<result name="index">/index.jsp</result>
<result name="welcome">/user/welcome.jsp</result>
<result name="input">/regist.jsp</result>
<!-- Book result -->
<result name="selectOK">/user/selectBook.jsp</result>
<result name="addbookOK" type="chain">select_BookAction</result>
<result name="deleteOK" type="chain">select_BookAction</result>
<result name="showUpdateBookList">/user/preUpdate.jsp</result>
<result name="showUpdateBook">/user/updateBook.jsp</result>
<result name="updateOK" type="chain">select_BookAction</result>
</action>
我用的是通配符,delete_BookAction对应deleteBook方法
开始我用的模型驱动,结果一直实现不了,我在deleteBook方法中输出id结果id为0.我才知道Action并没有接收到id参数,后来网上看了许多关于Action接收值的问题,也没有找出来问题到底出在哪,
之后想到是不是,页面上id的getter,setter方法覆盖了模型驱动获取到的id,我将模型驱动代码删除,结果OK了,得出结论,用模型驱动时,Action页面上声明的对象值会覆盖模型中获取的对象的值,而网页传过去的值传给了模型 ,而并没有传给声明的对象,所以Action是获取不到值的。