兩畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            17 隨筆 :: 20 文章 :: 2 評論 :: 0 Trackbacks
          整個項目第二個重點就是回復留言,我的思路是在瀏覽留言的時候,回復鍵傳送主題的ID,一個Action Class處理這個請求,
          將與這個ID相關的留言查詢出來,寫入ActionForm。
          1. 打開display.jsp文件,找到下面這幾行,后面添加一個form,用來提交查詢請求。
             1 <table>
             2     <tr>
             3         <td>
             4             <bean:write name="topic" property="post.subject"/> 留言者:<bean:write name="topic" property="post.name" /> 留言日:<bean:write name="topic" property="post.date" format="yyyy/MM/dd(E) HH:mm" />  No.<bean:write name="topic" property="post.id" />
             5         </td>
             6         <td>
             7             <html:form action="read">
             8                 <input type="hidden" name="id" value="<bean:write name='topic' property='post.id'/>"/>
             9               <html:submit value="回復" />
            10             </html:form>
            11       </td>
            12    </tr>
            13   </table>
            6-11行,就是新加入的對id的一個請求,這里我用了普通的html標志來提交請求,當然我們也可以用<html:hidden name="topic" property="post.id"/>,但是在處理請求的時候,相對的request.getParameter("id"),就要換成
            request.getParameter("post.id")了;或者我們可以在那個Topic類里,添加一個id字段,那么在瀏覽留言的時候(ListAction的execute方法,list.add(new Topic(post,replies)); 改成list.add(new Topic(post,replies,post.getId()));)<html:hidden name="topic" property="id"/>也可以這樣用了。

          2. 添加一個ActionForm bean ThreadForm.java,除了記錄一段留言外,還包括了行將用以回復的留言的預處理;
             1 public class ThreadForm extends org.apache.struts.action.ActionForm {
             2     
             3     private int id;
             4     private String name;
             5     private String subject;
             6     private String content;
             7     private String url;
             8     private String email;
             9     private int iconId;
            10     private String icon;
            11     private String password;
            12     private int replyId;
            13     private String font;
            14 
            15     private List icons;
            16 
            17     private Topic topic;
            18 
            19     // accessor methods..
            20     
            21 
            22     public ThreadForm() {
            23         super();
            24         // TODO Auto-generated constructor stub
            25         setUrl("http://");
            26         setFont("#800000");
            27         String sql = "select id,name,src from icon order by id";
            28         QueryRunner qr = DbHelper.getQueryRunner();
            29         List list = null;
            30         try {
            31             list = (List) qr.query(sql, new BeanListHandler(Icon.class));
            32             // TODO Auto-generated constructor stub
            33         } catch (SQLException ex) {
            34             Logger.getLogger(ThreadForm.class.getName()).log(Level.SEVERE, null, ex);
            35         }
            36         setIcons(list);
            37     }
            38     
            39   
            40 }
            41
            3-15行是負責對回復的預處理,ThreadForm()方法中主要也是處理圖標。

          3. 這個回復過程其實是2部,1.預處理:包括列出與ID相關的留言,預設回復的默認標題以及對應的回復id (replyId);2.回復留言,添加記錄。
            a.  PreReplyAction.java
            public class PreReplyAction extends org.apache.struts.action.Action {
                
                
            /* forward name="success" path="" */
                
            private static final String SUCCESS = "bbs.read";
                
                
            /**
                 * This is the action called from the Struts framework.
                 * 
            @param mapping The ActionMapping used to select this instance.
                 * 
            @param form The optional ActionForm bean for this request.
                 * 
            @param request The HTTP Request we are processing.
                 * 
            @param response The HTTP Response we are processing.
                 * 
            @throws java.lang.Exception
                 * 
            @return
                 
            */
                @Override
                
            public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                       {
                    ThreadForm f 
            = (ThreadForm) form;
                    String id 
            = (String) request.getParameter("id");
                    String sql;
                    QueryRunner qr 
            = DbHelper.getQueryRunner();
                    
                    List list 
            = null;
                    sql 
            = "select * from guestbook where id = " + id;
                    
            try {
                        list 
            = (List) qr.query(sql, new BeanListHandler(Post.class));
                    } 
            catch (SQLException ex) {
                        Logger.getLogger(PreReplyAction.
            class.getName()).log(Level.SEVERE, null, ex);
                    }
                    Post post 
            = null;
                    post 
            = (Post)list.get(0);
                    List replies 
            = null;
                    sql 
            = "select * from guestbook where replyId =" + id + " order by id";
                    
            try {
                        replies 
            = (List) qr.query(sql, new BeanListHandler(Post.class));
                    } 
            catch (SQLException ex) {
                        Logger.getLogger(PreReplyAction.
            class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                    Topic topic 
            = new Topic(post,replies);
                    f.setTopic(topic);
                    f.setSubject(
            "Re :" + post.getSubject());
                    f.setReplyId(post.getId());

                    
            return mapping.findForward(SUCCESS);
                }
            }

            b. ReplyAction.java
             1 public class ReplyAction extends org.apache.struts.action.Action {
             2     
             3     /* forward name="success" path="" */
             4     private static final String SUCCESS = "bbs.reply";
             5     
             6     /**
             7      * This is the action called from the Struts framework.
             8      * @param mapping The ActionMapping used to select this instance.
             9      * @param form The optional ActionForm bean for this request.
            10      * @param request The HTTP Request we are processing.
            11      * @param response The HTTP Response we are processing.
            12      * @throws java.lang.Exception
            13      * @return
            14      */
            15     @Override
            16     public ActionForward execute(ActionMapping mapping, ActionForm form,
            17             HttpServletRequest request, HttpServletResponse response)
            18             throws Exception {
            19         ThreadForm f = (ThreadForm)form;
            20         String sql = "insert into guestbook (name,subject,email,url,content,iconId,password,font,replyId,date,lastReplyTime) " +
            21                 "values(?,?,?,?,?,?,?,?,?,now(),now())";
            22         String content = f.getContent();
            23         content = content.replaceAll(" ""&nbsp;");
            24         content = content.replaceAll("\n","<br>");
            25         String params[] = {f.getName(),f.getSubject(),f.getEmail(),f.getUrl(),content,new Integer(f.getIconId()).toString(),f.getPassword(),f.getFont(),new Integer(f.getReplyId()).toString()};
            26 
            27         QueryRunner qr = DbHelper.getQueryRunner();
            28         try {
            29             qr.update(sql, params);
            30         } catch (SQLException ex) {
            31             Logger.getLogger(ReplyAction.class.getName()).log(Level.SEVERE, null, ex);
            32         }
            33        sql = "update guestbook set lastReplyTime= now() where id = " + f.getReplyId();
            34         try {
            35             qr.update(sql);
            36         } catch (SQLException ex) {
            37             Logger.getLogger(ReplyAction.class.getName()).log(Level.SEVERE, null, ex);
            38         }
            39         return mapping.findForward(SUCCESS);
            40     }
            41 }
            這個基本和添加留言的一直,只是在insert回復記錄以后,更新主題留言的最近的回復時間,可以保證瀏覽留言的時候,該主題能在最前端。

          4. reply.jsp 基本和之前寫的jsp頁面區別不大,省略了。

          5. 添加相應的forwarding信息。
            <global-forwards>
                    
            <forward name="bbs.post" path="/result.jsp"/>
                    
            <forward name="bbs.list" path="/display.jsp"/>
                    
            <forward name="bbs.read" path="/reply.jsp" />
                    
            <forward name="bbs.reply" path="/list.do" />
                    
            <forward name="welcome"  path="/Welcome.do"/>
            </global-forwards>
            根據forward的指向,我們可以看到在reply.jsp按下回復鍵以后,直接轉向list.do動作。
            至于action-mapping 沒有什么要注意的。

          6. 整個回復過程就此完成。

          posted on 2009-10-28 13:14 Chucky 閱讀(353) 評論(0)  編輯  收藏 所屬分類: BBS Struts項目
          主站蜘蛛池模板: 广灵县| 泽库县| 察雅县| 昌黎县| 克拉玛依市| 隆化县| 太白县| 武强县| 伽师县| 莫力| 金塔县| 芒康县| 和平区| 施秉县| 马龙县| 泰州市| 曲周县| 邻水| 玉林市| 广宗县| 女性| 临邑县| 高碑店市| 东明县| 华安县| 伊川县| 云林县| 灵武市| 吉水县| 滁州市| 石景山区| 乐陵市| 延川县| 石泉县| 康平县| 黔西| 克东县| 皋兰县| 阿瓦提县| 新津县| 阳东县|