上期讲了新闻管理模块Model层的开发,本期让我们来一起开发新闻管理的Action类和JSP页面。
先从JSP页面写起吧,在admin目录下建两个文件,一个是显示新闻列表的article.jsp,另一个是新闻编辑的article-input.jsp,新闻添加和新闻修改归于同一文件,节省一点资源,这一点,学习了Springside开源项目。再建一个新闻管理的Action类ArticleAction.java。这三个文件的目录结构如下:
网站根目录/WEB-INF/content/admin/article.jsp 网站根目录/WEB-INF/content/admin/article-input.jsp 类路径根目录/cn/simple/action/admin/ArticleAction.java |
在前面的教程中,我们已经说过,JSP文件存放的目录是content,也就是说JSP文件相对于网站根目录的访问路径是从content下面的目录算起。类路径要与JSP路径匹配,请大家特别注意上面红色显示部分。
好,来看一下Action类的代码:
import java.util.Date;
import java.util.List;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import cn.simple.manager.ArticleManager;
import cn.simple.pojo.Article;
import com.opensymphony.xwork2.ActionSupport;
@Results( {
@Result(name="success", location="article.jsp", type="dispatcher"),
@Result(name="input", location="article-input.jsp", type="dispatcher"),
@Result(name="reload", location="article.action", type="redirect")
} )
public class ArticleAction extends ActionSupport {
private List<Article> articles;
private Article article;
@Override
public String execute() throws Exception {
return list();
}
//查询列表
public String list() throws Exception {
articles = ArticleManager.selectAllArticles();
return SUCCESS;
}
//进入编辑页面
public String input() throws Exception {
//为了修改
if(null != article && 0 != article.getId()){
int id = article.getId();
article = ArticleManager.queryArticleById(id);
}
//为了新增
else{
article = new Article();
}
return INPUT;
}
//执行新增或修改
public String save() throws Exception {
//新增操作
article.setPubtime(new Date());
if(0 == article.getId()){
ArticleManager.insertArticle(article);
}
//修改操作
else{
ArticleManager.updateArticle(article);
}
return "reload";
}
//执行删除
public String delete() throws Exception {
ArticleManager.deleteArticle(article.getId());
return "reload";
}
/** *//************** getter和setter方法 *****************/
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
public Article getArticle() {
return article;
}
public void setArticle(Article article) {
this.article = article;
}
}
大家可注意到默认是execute方法,我们让它去调用list方法,也就是当我们访问ArticleAction的时候,它默认是查询所有新闻列表的。增、删、查、改等方法,都是调用了上一期教程中的ArticleManager类的方法,大家若忘记了,可先看下:Struts 2.1.6 精简实例系列教程(3):新闻管理Model层的开发(整合iBatis)。
我们访问的时候是怎么访问的呢?对ArticleAction类来说:
查询列表:admin/article.action或admin/article ! list.action 进入编辑页面(若是添加):admin/article ! input.action 进入编辑页面(若是修改):admin/article ! input.action ? id=4 执行新增或修改操作(更新到数据库):admin/article ! save.action 执行删除操作:admin/article ! delete.action |
我们可以看到,Struts 2有一种很好用的用法就是加感叹号“!”来访问我们的Action类中的方法。除了这些外,以前方法,其实可以去掉“.action”访问的,就像我们前面讲的一样。
还有一点提醒,上面的Action类中,有些@Result是可以不用配置的,name=”success”和name=”input”这两个@result都是不用配置的,只要大家遵从Struts 2.1.6的一些命名规范,有时候能节省一些代码。不过,为了大家容易理解,我把那些约定俗成默认的可不写的,都写了出来,这样,对于初学都来说,容易理解一点。
新闻列表页article.jsp的代码如下:
<% @ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<% @ taglib prefix="s" uri="/struts-tags" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" />
< title > SimpleWeb新闻列表页 </ title >
</ head >
< body >
< h5 >< a href ="article.action" > 新闻列表 < a /> —— < a href ="article!input.action" > 发表新闻 < a /></ h5 >
< h2 > 新闻列表 </ h2 >
< table border ="1" cellspacing ="0" cellpadding ="0" >
< tr >
< th scope ="col" > 新闻编号 </ th >
< th scope ="col" > 新闻标题 </ th >
< th scope ="col" > 作者 </ th >
< th scope ="col" > 发表时间 </ th >
< th scope ="col" > 管理 </ th >
</ tr >
< s:iterator value ="articles" >
< tr >
< td > ${id} </ td >
< td > ${title} </ td >
< td > ${author} </ td >
< td >< s:date name ="pubtime" format ="yyyy/MM/dd" /></ td >
< td >< a href ="article!input.action?article.id=${id}" > 编辑 </ a > | < a href ="article!delete.action?article.id=${id}" > 删除 </ a ></ td >
</ tr >
</ s:iterator >
</ table >
</ body >
</ html >
新闻编辑页的代码如下:
<% @ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<% @ taglib prefix="s" uri="/struts-tags" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" />
< title > SimpleWeb新闻列表页 </ title >
</ head >
< body >
< h5 >< a href ="article.action" > 新闻列表 < a /> —— < a href ="article!input.action" > 发表新闻 < a /></ h5 >
< h2 > 编辑新闻 </ h2 >
< form action ="article!save.action" method ="post" >
< input type ="hidden" name ="article.id" value ="${article.id}" />
< table border ="0" cellspacing ="0" cellpadding ="0" >
< tr >
< th scope ="row" > 新闻标题 </ th >
< td >< input type ="text" name ="article.title" value ="${article.title}" /> </ td >
</ tr >
< tr >
< th scope ="row" > 提交者 </ th >
< td >< input type ="text" name ="article.author" value ="${article.author}" /> </ td >
</ tr >
< tr >
< th scope ="row" > 新闻内容 </ th >
< td >< textarea rows ="20" cols ="70" name ="article.content" > ${article.content} </ textarea > </ td >
</ tr >
< tr >
< th scope ="row" > </ th >
< td >< input type ="submit" value ="保存" /></ td >
</ tr >
</ table >
</ form >
</ body >
</ html >
输入http://localhost:8060/SimpleWeb/admin/article.action进入新闻列表页面,运行效果截图:
好,明天新的一个星期的工作日,早睡早起!敬请大家继续关注我的Struts 2.1.6 精简实例系列教程。
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)