隨筆-42  評(píng)論-578  文章-1  trackbacks-0

          上期講了新聞管理模塊Model層的開(kāi)發(fā),本期讓我們來(lái)一起開(kāi)發(fā)新聞管理的Action類和JSP頁(yè)面。

          先從JSP頁(yè)面寫起吧,在admin目錄下建兩個(gè)文件,一個(gè)是顯示新聞列表的article.jsp,另一個(gè)是新聞編輯的article-input.jsp,新聞添加和新聞修改歸于同一文件,節(jié)省一點(diǎn)資源,這一點(diǎn),學(xué)習(xí)了Springside開(kāi)源項(xiàng)目。再建一個(gè)新聞管理的Action類ArticleAction.java。這三個(gè)文件的目錄結(jié)構(gòu)如下:

          網(wǎng)站根目錄/WEB-INF/content/admin/article.jsp

          網(wǎng)站根目錄/WEB-INF/content/admin/article-input.jsp

          類路徑根目錄/cn/simple/action/admin/ArticleAction.java

          在前面的教程中,我們已經(jīng)說(shuō)過(guò),JSP文件存放的目錄是content,也就是說(shuō)JSP文件相對(duì)于網(wǎng)站根目錄的訪問(wèn)路徑是從content下面的目錄算起。類路徑要與JSP路徑匹配,請(qǐng)大家特別注意上面紅色顯示部分。

          好,來(lái)看一下Action類的代碼:

          package cn.simple.action.admin;

          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;
              }

              
          //進(jìn)入編輯頁(yè)面
              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;
              }

              
              
          //執(zhí)行新增或修改
              public String save() throws Exception {
                  
          //新增操作
                  article.setPubtime(new Date());
                  
          if(0 == article.getId()){
                      ArticleManager.insertArticle(article);
                  }

                  
          //修改操作
                  else{
                      ArticleManager.updateArticle(article);
                  }

                  
          return "reload";
              }

              
              
          //執(zhí)行刪除
              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;
              }

              

          }

           

          大家可注意到默認(rèn)是execute方法,我們讓它去調(diào)用list方法,也就是當(dāng)我們?cè)L問(wèn)ArticleAction的時(shí)候,它默認(rèn)是查詢所有新聞列表的。增、刪、查、改等方法,都是調(diào)用了上一期教程中的ArticleManager類的方法,大家若忘記了,可先看下:Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(3):新聞管理Model層的開(kāi)發(fā)(整合iBatis)。

          我們?cè)L問(wèn)的時(shí)候是怎么訪問(wèn)的呢?對(duì)ArticleAction類來(lái)說(shuō):

          查詢列表:admin/article.action或admin/article ! list.action
          進(jìn)入編輯頁(yè)面(若是添加):admin/article ! input.action
          進(jìn)入編輯頁(yè)面(若是修改):admin/article ! input.action ? id=4
          執(zhí)行新增或修改操作(更新到數(shù)據(jù)庫(kù)):admin/article ! save.action
          執(zhí)行刪除操作:admin/article ! delete.action

          我們可以看到,Struts 2有一種很好用的用法就是加感嘆號(hào)“!”來(lái)訪問(wèn)我們的Action類中的方法。除了這些外,以前方法,其實(shí)可以去掉“.action”訪問(wèn)的,就像我們前面講的一樣。

          還有一點(diǎn)提醒,上面的Action類中,有些@Result是可以不用配置的,name=”success”和name=”input”這兩個(gè)@result都是不用配置的,只要大家遵從Struts 2.1.6的一些命名規(guī)范,有時(shí)候能節(jié)省一些代碼。不過(guò),為了大家容易理解,我把那些約定俗成默認(rèn)的可不寫的,都寫了出來(lái),這樣,對(duì)于初學(xué)都來(lái)說(shuō),容易理解一點(diǎn)。

          新聞列表頁(yè)article.jsp的代碼如下:

          <?xml version="1.0" encoding="UTF-8" ?>
          <%@ 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新聞列表頁(yè)</title>
          </head>
          <body>
          <h5><href="article.action">新聞列表<a/>——<href="article!input.action">發(fā)表新聞<a/></h5>
          <h2>新聞列表</h2>
          <table border="1" cellspacing="0" cellpadding="0">
            
          <tr>
              
          <th scope="col">新聞編號(hào)</th>
              
          <th scope="col">新聞標(biāo)題</th>
              
          <th scope="col">作者</th>
              
          <th scope="col">發(fā)表時(shí)間</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><href="article!input.action?article.id=${id}">編輯</a>|<href="article!delete.action?article.id=${id}">刪除</a></td>
            
          </tr>
            
          </s:iterator>
          </table>
          </body>
          </html>

           

          新聞編輯頁(yè)的代碼如下:

          <?xml version="1.0" encoding="UTF-8" ?>
          <%@ 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新聞列表頁(yè)</title>
          </head>
          <body>
          <h5><href="article.action">新聞列表<a/>——<href="article!input.action">發(fā)表新聞<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">新聞標(biāo)題</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">新聞內(nèi)容</th>
              
          <td><textarea rows="20" cols="70" name="article.content">${article.content}</textarea> </td>
            
          </tr>
            
          <tr>
              
          <th scope="row">&nbsp;</th>
              
          <td><input type="submit" value="保存"/></td>
            
          </tr>
          </table>
          </form>
          </body>
          </html>

           

          輸入http://localhost:8060/SimpleWeb/admin/article.action進(jìn)入新聞列表頁(yè)面,運(yùn)行效果截圖:

          image

          image

           

          好,明天新的一個(gè)星期的工作日,早睡早起!敬請(qǐng)大家繼續(xù)關(guān)注我的Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程。



          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2009-07-27 01:14 心夢(mèng)帆影 閱讀(3242) 評(píng)論(2)  編輯  收藏 所屬分類: Struts2.1.6系列教程

          評(píng)論:
          # re: Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(4):新聞管理模塊的實(shí)現(xiàn) 2009-07-27 19:08 | 小人物
          就按照你的課程學(xué)struts2.1.6啦!  回復(fù)  更多評(píng)論
            
          # re: Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(4):新聞管理模塊的實(shí)現(xiàn) 2009-07-29 11:05 | jadmin
          嗯,不錯(cuò)  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 南丹县| 习水县| 武汉市| 成武县| 乃东县| 凯里市| 临湘市| 买车| 南平市| 乳源| 西青区| 铜鼓县| 婺源县| 淮阳县| 尤溪县| 阿尔山市| 巨野县| 昌图县| 仙游县| 琼中| 若尔盖县| 兰考县| 潞城市| 凤山县| 四子王旗| 武定县| 磐安县| 营山县| 大宁县| 钟祥市| 壶关县| 莆田市| 重庆市| 绥滨县| 凤凰县| 增城市| 东莞市| 江永县| 潜江市| 绩溪县| 安吉县|