(3)修改文章
<a href="<%=URL%>/ArticleAction.action?action=adminSelectList&typeID=">删除文章</a>
我们修改文章也是,先显示一个文章列表,然后在选择哪一篇来修改。然后这个文章列表也是和删除文章列表一样的页面。
所有的文章存在一个List里面,我们在ArticleList里面循环显示文章,我们在每个文章后面除了加一个删除的链接还有也给修改的链接:
<a href="<%=URL%>/ArticleAction.action?action=modify&id=<%=articleBean.getId()%>">修改文章</a>
我们的修改文章也是交给ArticleAction来处理,传递action和id参数,action是modify,表示修改,id就是这一篇要修改的文章的id。
现在我们看看ArticleAction里面如何处理action为modify的操作。
以下是ArticleAction里面处理modify操作的函数。
public String modifyArticle(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session=request.getSession();
RequestDispatcher rd=null;
ArticleDao articleDao=new ArticleDao();
String type=request.getParameter("type");
if(type==null){
type="";
}
if(!type.equals("doModify")){
//判断如果不是修改操作,就进行文章查询,通过id查看指定的某一篇文章
int id=Common.strToint(request.getParameter("id"));
ArticleBean articleBean=articleDao.queryArticleByID(id);
request.setAttribute("modifySingle", articleBean);
String url="/admin/article/ArticleModify.jsp";
return url;
}
else{
String messages="";
String forward="";
String href="";
ArticleBean articleBean=new ArticleBean();
articleBean.setId(Common.strToint(request.getParameter("id")));
articleBean.setArticleTypeID(Integer.parseInt(request.getParameter("typeID")));
articleBean.setArticleTitle(Common.toChinese(request.getParameter("title")));
articleBean.setArticleFrom(Common.strToint(request.getParameter("from")));
articleBean.setArticleInfo(Common.toChinese(request.getParameter("info")));
articleBean.setArticleContent(Common.toChinese(request.getParameter("content")));
articleBean.setMasterID(Common.strToint(request.getParameter("masterID")));
boolean flag=articleDao.operationArticle("modify", articleBean);
System.out.println("info:"+articleBean.getArticleInfo());
if(flag){
messages="<li>修改成功!!!</li>";
href="<a href='"+this.URL+"/ArticleServlet?action=adminSelectList&typeID="
+session.getAttribute("showTypeID")+"'>[继续修改其他文章]</a>";
forward="admin/success.jsp";
}
else{
messages="<li>修改失败!!!</li>";
href="<a href ='javascript:window.history.go(-1)'>[返回]</a>";
forward="admin/error.jsp";
}
request.setAttribute("messages", messages);
request.setAttribute("href", href);
String url=this.adminSelectList(request, response);
return url;
}
}
我们看到,它首先是通过request获取参数名师type的值,先判断这个值是否是doModify,如果是,则表示保存修改好的文章,如果不是,那么就是进行修改操作。
而我们修改操作之前,就必须把这一篇文章的具体信息先找出来,所以我们还会执行一个查询操作,查询结果返回后,并存到request里面,设置其参数名为modifySingle,然后跳转到/admin/article/ArticleModify.jsp页面,进行修改操作。
我们看一下ArticleModify.jsp页面。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.List,com.MyBlog.common.GLOBALS,com.MyBlog.action_implements.ArticleAction,com.MyBlog.entity.ArticleBean"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <%String URL=session.getAttribute("url").toString();%> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>博客管理——修改文章</title> </head> <body> <% ArticleBean articleBean=(ArticleBean)request.getAttribute("modifySingle"); int id=articleBean.getId(); int typeID=articleBean.getArticleTypeID(); String title=articleBean.getArticleTitle(); int from=articleBean.getArticleFrom(); String info=articleBean.getArticleInfo(); String content=articleBean.getArticleContent(); out.print(info); %> <!-- 文章修改后,保存按钮,提交请求的表单设置 --> <form action="<%=URL%>/ArticleAction.action" method="post"> <input type="hidden" name="action" value="modify"> <input type="hidden" name="type" value="doModify"> <input type="hidden" name="id" value="<%=id%>"> <table id="table"> <tr> <td><label for="typeID">类别ID</label></td> <td><input id="typeID" type="text" name="typeID" value="<%=typeID%>"></td> </tr> <tr> <td><label for="title">文章标题</label></td> <td><input id="title" type="text" name="title" value="<%=title%>"></td> </tr> <tr> <td><label for="from">文章来源</label></td> <td><input id="from" type="text" name="from" value="<%=from%>"></td> </tr> <tr> <td><label for="info">文章描述</label></td> <td><input id="info" type="text" name="info" value="<%=info%>"></td> </tr> <tr> <td><label for="content">文章内容</label></td> <td><textarea id="content" rows="30" cols="100" name="content"><%=content%></textarea> </td> </tr> </table> <input type="submit" value="修改"> <input type="reset" value="清空"> </form> </body> </html>
我们首先获取request里面参数名为modifySingle的值,即我们之前查询的结果,然后我们设置一个表单,这个表单加了三个type为hidden的隐藏input,分别是:
<input type="hidden" name="action" value="modify">
<input type="hidden" name="type" value="doModify">
<input type="hidden" name="id" value="<%=id%>">
第一个表示当前是什么操作,即修改操作,第二个是表示修改的type,即使保存修改,第三个就是这一篇文章的id。
然后我们搞了四个input,分别是类别id,文章标题,文章来源,文章描述的input,还有一个textarea,即文章内容,并把我们之前查询的结果作为这些input或textarea的初始值,然后我们直接修改这个input就达到了修改文章的目的。
我们修改好之后,就提交这个表单,给了ArticleAction处理,也是用我们处理action为modify的函数modifyArticle,这次我们判断的type的值是doModify,表示保存文章。我们首先把这些值设置到ArticleBean里面,然后由articleDao执行修改操作,即articleDao.operationArticle("modify", articleBean)。我们根据这个函数的返回值,判断我们是否修改成功,修改成功,跳转到admin/success.jsp页面,失败跳到admin/error.jsp页面。
以上是我们的文章的增删查改。
除了文章的增删查改,还有文章类型的增删查改、朋友的增删查、留言的增删查改,相册的增删查。这些的增删查改和我们上面说的文章的增删查改是大同小异的,我们后面只说说它们的与众不同之处。