<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    18.9  物資管理模塊

    18.9.1  物資管理模塊總體架構

    1.模塊功能介紹

    物資管理模塊主要包括以下功能。

      ●   查看物資列表:用于分類顯示未刪除的和已刪除的物資信息;

      ●   添加物資信息:用于添加物資信息;

      ●   修改物資信息:用于修改物資信息;

      ●   刪除/恢復物資信息:用于刪除或恢復物資信息。

    2.文件架構

    物資管理模塊文件架構如圖18.14所示。

    圖18.14  物資管理模塊文件架構

    18.9.2  創建物資管理模塊的持久化類及映射文件

    1.創建持久化類

    物資管理模塊只涉及到物資信息表tb_goods,因此只需要創建一個對應的持久化類,將其命名為GoodsForm。由于持久化類的創建方法大致相同,都是包含一些屬性,以及與之對應的getXXX()和setXXX()方法,這里就不詳細介紹了,具體實現方法請參見18.8.2節。

    2.創建映射文件

    創建一個名為GoodsForm.hbm.xml的文件,用于把GoodsForm類映射到tb_goods表,這個文件應該與UserForm.class文件存放在同一個目錄下,關鍵代碼如下。

    例程18-41:光盤\mr\18\MaterialManage\src\com\actionForm\GoodsForm.hbm.xml

    <class name="com.actionForm.GoodsForm" table="tb_goods">

       <id name="id" column="id" type="int">

       <generator class="increment"/>

       </id>

       <property name="name" column="name" type="string" not-null="true"/>

       <property name="spec"  column="spec"  type="string" not-null="true"/>

       <property name="unit"  column="unit"  type="string" not-null="true"/>

       <property name="price"  column="price"  type="float" not-null="true"/>

       <property name="producer"  column="producer"  type="string"/>

       <property name="ifdel"  column="ifdel"  type="byte"/>

       </class>

    3.修改Hibernate配置文件

    在創建持久化類和映射文件后,還需要在Hibernate配置文件hibernate.cfg.xml中指定持久化類映射文件,關鍵代碼如下:

    <mapping resource="com/actionForm/GoodsForm.hbm.xml"/>

    18.9.3  創建物資管理的Action實現類

    物資管理模塊的Action實現類繼承了Action類,在該類中首先需要在構造方法中實例化物資管理模塊的GoodsDAO類(該類用于實現業務邏輯操作),然后通過Action實現類的主要方法execute()執行相應的業務邏輯操作。Action實現類的execute()方法會被自動執行,這個方法本身沒有具體的事務,它是根據HttpServletRequest的getParameter()方法獲取的action參數值執行相應方法的。

    物資管理模塊的Action實現類的關鍵代碼如下。

    例程18-42:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    public class Goods extends Action {

        private GoodsDAO goodsDAO=null;

        public Goods(){

            goodsDAO=new GoodsDAO();

        }

        public ActionForward execute(ActionMapping mapping, ActionForm form,

                                     HttpServletRequest request,

                                     HttpServletResponse response) {

            String action=request.getParameter("action"); //獲取action參數值

            if(action.equals("") || action==null){

                request.setAttribute("error","您的操作有誤!");

                return mapping.findForward("error");

            }else if(action.equals("goodsRequest")){     //查詢物資信息

                return goodsQuery(mapping,form,request,response);

            }else if(action.equals("goodsadd")){     //添加物資信息

                return goodsAdd(mapping,form,request,response);

            }else if(action.equals("goodsMquery")){     //查詢單條物資信息

                return goodsModiQuery(mapping,form,request,response);

            }else if(action.equals("goodsmodify")){     //修改物資信息

                return goodsModify(mapping,form,request,response);

            }else if(action.equals("goodsdel")){     //刪除物資信息

                return goodsdel(mapping,form,request,response);

            }

            request.setAttribute("error","您的操作有誤!");

            return mapping.findForward("error");

        }

        ……  //此處省略了該類中其他方法,這些方法將在后面的具體過程中給出

    }

    18.9.4  查看物資列表設計

    用戶登錄后,選擇“基礎信息”→“物資管理”命令,進入到查看物資列表頁面,在該頁面中將列出系統中的除超級用戶mr之外的用戶及其權限信息,同時提供添加物資信息、修改物資和刪除物資信息的超級鏈接。查看物資列表頁面的運行結果如圖18.15所示。

    圖18.15  查看物資列表頁面運行結果

    在實現系統導航菜單時,引用了JavaScript文件menu.JS,該文件實現了半透明背景菜單的全部JavaScript代碼。打開該JS文件,可以找到如下所示的“物資管理”菜單項的超級鏈接代碼:

    <a href=goods.do?action=goodsRequest>物資管理</a>

    從上面的URL地址中可以知道查看物資列表模塊涉及到的action的參數值為“goodsRequest”,當action=goodsRequest時,會調用查看物資列表的方法goodsQuery(),具體代碼如下。

    例程18-43:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    if(action.equals("goodsRequest")){

        return goodsQuery(mapping,form,request,response);

    }

    在查看物資列表的方法goodsQuery()中,首先調用GoodsDAO類中的query()方法查詢出未刪除的和已刪除的物資信息,再將返回的查詢結果分別保存到HttpServltRequest的對象goodslist0和goodslist1中,查看物資列表的方法goodsQuery()的具體代碼如下。

    例程18-44:光盤\mr\18\MaterialManage\src\com\action\Goods.java

        public ActionForward goodsQuery(ActionMapping mapping,ActionForm form,

                                    HttpServletRequest request,HttpServletResponse response){

            String str=null;

            int ifdel=0;     //獲取未被刪除的物資信息

            request.setAttribute("goodslist0",goodsDAO.query(str,ifdel));

            ifdel=1;     //獲取已被刪除的物資信息

            request.setAttribute("goodslist1",goodsDAO.query(str,ifdel));

            return mapping.findForward("goodsQuery");

        }

    從上面的代碼中可以知道查看物資列表使用的GoodsDAO類的方法是query(),該方法包括兩個參數,一個是String型參數strif(用于指定查詢條件字符串),另一個是int型參數del(用于標記是查詢未刪除的還是查詢已刪除的物資信息,0表示未刪除的,1表示已刪除的)。在query()方法中首先判斷參數strif的值是否為空并且是否為“all”,當strif不為空并且不為“all”時,將通過Hibernate的HQL根據指定的條件查詢物資信息,否則將通過Hibernate的HQL查詢未刪除或已刪除的物資信息。然后將查詢結果保存到List集合中并返回該List,query()方法的具體代碼如下。

    例程18-45:光盤\mr\18\MaterialManage\src\com\dao\GoodsDAO.java

        public List query(String strif, int del) {

            session = MySession.openSession(); //打開Session

            String hql = "";

            if (strif != "all" && strif != null && strif != "") { //條件查詢

                hql = "FROM GoodsForm goods WHERE " + strif + "";

            } else {     //查詢未刪除或已刪除的物資信息

                hql = "FROM GoodsForm goods WHERE ifdel=" + del + " ORDER BY ifdel";

            }

            List list=null;

            try {

                Query query = session.createQuery(hql);

                list = query.list();

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                MySession.closeSession(session); //關閉Session

            }

            return list;

        }

    在struts-config.xml文件中配置查看物資列表所涉及的<forward>元素,代碼如下:

    <forward name="goodsQuery" path="/goodsList.jsp" />

    接下來的工作是將Action實現類中goodsQuery()方法返回的查詢結果顯示在查看物資列表頁goodsList.jsp中。在goodsList.jsp中首先通過request.getAttribute()方法獲取查詢結果并將其保存在List集合中,再通過循環將物資信息以列表形式顯示在頁面中,由于該頁面涉及到兩個結果集,所以需要分別獲取并顯示。

    說明:由于該頁面與18.8.5節中的顯示用戶信息列表頁類似,所以此處將不再贅述。

    18.9.5  添加物資信息設計

    用戶登錄后,選擇“基礎信息”→“物資管理”命令,進入到查看物資列表頁面,在該頁面中單擊“添加物資信息”超級鏈接即可進入添加物資信息頁面。添加物資信息頁面的運行結果如圖18.16所示。

    圖18.16  添加物資信息頁面的運行結果

    1.設計添加物資信息頁面

    添加物資信息頁面主要用于收集輸入的物資信息及通過自定義的JavaScript函數驗證輸入信息是否合法,該頁面中所涉及到的重要表單元素如表18.15所示。

    表18.15                                   添加物資信息頁面所涉及的重要表單元素

    名    稱

    元 素 類 型

    重 要 屬 性

    含    義

    form1

    form

    method="post"action="goods.do?action=goodsadd" onSubmit="return mycheck(form1)"

    表單

    name

    text

    物資名稱

    ifdel

    hidden

    value="0"

    是否刪除

    Submit

    submit

    value="保存"

    【保存】按鈕

    Submit3

    button

    value="返回"

    onClick="window.location.href='goods.do?action=goodsRequest'"

    【返回】按鈕

    2.修改物資管理的Action實現類

    在添加物資信息頁面中輸入合法的物資信息后,單擊“保存”按鈕,網頁會訪問一個URL,這個URL是“goods.do?action=goodsadd”。從該URL地址中可以知道添加用戶模塊涉及到的action的參數值為“goodsadd”,也就是當action=goodsadd時,會調用添加用戶的方法goodsAdd(),具體代碼如下。

    例程18-46:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    if(action.equals("goodsadd")){

         return goodsAdd(mapping,form,request,response);

    }

    在添加物資信息的方法goodsAdd()中,首先需要將接收到的表單信息強制轉換成ActionForm類型,然后調用GoodsDAO類中的insert()方法將添加的用戶信息保存到數據表中,并將返回值保存到變量rtn中,如果返回值為1,表示信息添加成功,將頁面重定向到添加信息成功頁面。如果返回值為2,表示該物資信息已經添加,將錯誤提示信息“該物資信息已經存在!”保存到HttpServletRequest的對象error中,然后將頁面重定向到錯誤提示信息頁面;否則將錯誤提示信息“添加物資信息失敗!”保存到HttpServletRequest的對象error中,并將頁面重定向到錯誤提示頁,添加物資信息的方法goodsAdd()的關鍵代碼如下。

    例程18-47:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    public ActionForward goodsAdd(ActionMapping mapping,ActionForm form,

                                HttpServletRequest request,HttpServletResponse response){

        GoodsForm goodsForm = (GoodsForm) form;

        int rtn=goodsDAO.insert(goodsForm);

        ……    //此處省略了根據返回值重定向頁面的代碼

    }

    3.編寫添加物資的GoodsDAO類的方法

    從上面的代碼中可以知道添加用戶使用的GoodsDAO類的方法是insert()。在insert()方法中首先調用GoodsDAO的query()方法從數據表tb_goods中查詢輸入的物資信息是否存在,如果存在,將標志變量設置為2,否則將輸入的信息保存到物資信息表中,如果插入時拋出異常,將回滾事務并將標志變量設置0,否則將標志變量設置為1,最后返回標志變量,insert()方法的具體代碼如下。

    例程18-48:光盤\mr\18\MaterialManage\src\com\dao\GoodsDAO.java

    public int insert(GoodsForm goodsForm) {

        int ret = 0;

        Transaction tx = null;

        String str = "name='" + goodsForm.getName() + "' AND spec='" + goodsForm.getSpec() + "'";

        List list = query(str, 0);

        if (list.size() > 0) {      //存在該信息

            ret = 2;

        } else {

            session = MySession.openSession();    //打開Session

            try {

                tx = session.beginTransaction();

                session.save(goodsForm);

                tx.commit();

                ret = 1;

            } catch (Exception e) {

                if (tx != null) {

                    tx.rollback();

                }

                return ret = 0;

            } finally {

                MySession.closeSession(session); //關閉Session

            }

        }

        return ret;

    }

    4.struts-config.xml文件配置

    在struts-config.xml文件中配置添加用戶所涉及的<forward>元素,代碼如下:

    <forward name="goodsaddok" path="/goods_ok.jsp?para=1" />

    18.9.6  修改物資設計

    用戶登錄后,選擇“基礎信息”→“物資管理”命令,進入到查看物資列表頁面,在該頁面中單擊想要修改的物資信息后面的“修改”超級鏈接即可進入到“修改物資信息”頁面對物資信息進行修改。修改物資信息頁面的運行結果如圖18.17所示。

    圖18.17  修改物資信息頁面的運行結果

    1.設計修改物資信息頁面

    在“查看物資列表”頁面中可以找到打開“修改物資信息”頁面的超級鏈接代碼,如下所示。

    例程18-49:光盤\mr\18\MaterialManage\defaultroot\goodsList.jsp

    <a href="goods.do?action=goodsMquery&id=<%=id%>">修改</a>

    從上面的URL地址中可以知道修改物資信息頁面所涉及到的action的參數值為“goodsMquery”,當action=goodsMquery時,會調用查詢指定物資信息的方法goodsModiQuery(),具體代碼如下。

    例程18-50:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    if(action.equals("goodsMquery")){

        return goodsModiQuery(mapping,form,request,response);

    }

    在查詢指定物資信息的方法goodsModiQuery()中,首先需要獲取從頁面中傳遞的參數id的值并賦值給int型變量id,然后調用GoodsDAO類中的query()方法,并將變量id作為該方法的參數,查詢出指定物資信息,再將返回的查詢結果保存到HttpServletRequest的對象goodsForm中,查詢指定物資信息的方法goodsModiQuery()的具體代碼如下。

    例程18-51:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    public ActionForward goodsModiQuery(ActionMapping mapping,ActionForm form,

                               HttpServletRequest request,HttpServletResponse response){

        int id=Integer.parseInt(request.getParameter("id"));

        request.setAttribute("goodsForm",goodsDAO.query(id));

        return mapping.findForward("goodsModiQuery");

    }

    從上面的代碼中可以知道查詢指定物資信息使用的GoodsDAO類的方法是query(),該方法只有一個int型參數id(用于指定用戶id)。在query()方法中將利用Session的get()方法查詢出指定用戶,然后將查詢結果保存到GoodsForm中,并返回GoodsForm,query()方法的具體代碼如下。

    例程18-52:光盤\mr\18\MaterialManage\src\com\dao\GoodsDAO.java

    public GoodsForm query(int id) {

        session = MySession.openSession(); //打開Session

        GoodsForm goodsForm = null;

        try {

            goodsForm = (GoodsForm) session.get(GoodsForm.class, id);

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            MySession.closeSession(session); //關閉Session

        }

        return goodsForm;

    }

    在struts-config.xml文件中配置查詢指定物資信息所涉及的<forward>元素,代碼如下。

    <forward name="goodsModiQuery" path="/goodsModify.jsp" />

    接下來的工作是將Action實現類中goodsModiQuery()方法返回的查詢結果顯示在修改物資信息頁goodsModify.jsp中。在goodsModify.jsp中首先通過request.getAttribute()方法獲取查詢結果并將其顯示在相應的表單元素中。

    2.修改物資管理的Action實現類

    在修改物資信息頁面中對物資信息進行修改后,單擊“保存”按鈕,網頁會訪問一個URL,這個URL是“goods.do?action=goodsmodify”。從該URL地址中可以知道保存修改物資信息涉及到的action的參數值為“goodsmodify”,也就是當action=goodsmodify時,會調用保存修改物資信息的方法goodsModify(),具體代碼如下。

    例程18-53:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    if(action.equals("goodsmodify")){

         return goodsModify(mapping,form,request,response);

    }

    在保存修改物資信息的方法goodsModify()中,首先需要將接收到的表單信息強制轉換成ActionForm類型,然后調用GoodsDAO類中的update()方法將修改的物資信息保存到物資信息表tb_goods,并將返回值保存到變量rtn中,如果返回值為1,表示信息修改成功,將頁面重定向到修改信息成功頁面,否則將錯誤提示信息“物資信息修改失??!”保存到HttpServletRequest的對象error中,然后將頁面重定向到錯誤提示信息頁面,保存修改物資信息的方法goodsModify()的關鍵代碼如下。

    例程18-54:光盤\mr\18\MaterialManage\src\com\action\Goods.java

        public ActionForward goodsModify(ActionMapping mapping,ActionForm form,HttpServletRequest
    request,HttpServletResponse response){

            GoodsForm goodsForm = (GoodsForm) form;

            int rtn=goodsDAO.update(goodsForm);

            ……    //此處省略了根據返回值重定向頁面的代碼

        }

    3.編寫保存修改權限信息的GoodsDAO類的方法

    從上面的代碼中可以知道修改物資信息時使用的GoodsDAO類的方法是update()。在update()方法中將修改的物資信息保存到物資信息表tb_goods中,并將返回值賦給標志變量,最后返回該標志變量,update()方法的具體代碼如下。

    例程18-55:光盤\mr\18\MaterialManage\src\com\dao\GoodsDAO.java

    public int update(GoodsForm goodsForm) {

        session = MySession.openSession(); //打開Session

        int ret = 0;

        Transaction tx = null;

        try {

            tx = session.beginTransaction();

            GoodsForm goodsF = (GoodsForm) session.get(GoodsForm.class,

                    goodsForm.getId());

            goodsF.setSpec(goodsForm.getSpec());

            goodsF.setUnit(goodsForm.getUnit());

            goodsF.setPrice(goodsForm.getPrice());

            goodsF.setProducer(goodsForm.getProducer());

            session.update(goodsF);

            tx.commit();

            ret = 1;

        } catch (Exception e) {

            if (tx != null) {

                tx.rollback();

            }

            return ret = 0;

        } finally {

            MySession.closeSession(session); //關閉Session

        }

        return ret;

    }

    4.struts-config.xml文件配置

    在struts-config.xml文件中配置修改物資信息所涉及的<forward>元素,代碼如下:

    <forward name="goodsmodifyok" path="/goods_ok.jsp?para=2" />

    18.9.7  刪除/恢復物資信息設計

    用戶登錄后,選擇“基礎信息”→“物資管理”命令,進入到查看物資列表頁面,該頁面分為未刪除物資信息列表和已刪除物資信息列表,上面部分顯示的是未刪除的物資信息,下面部分顯示的是已刪除的物資信息。單擊未刪除物資信息后面的“刪除”超級鏈接可以將該物資刪除,此時該信息將顯示在已刪除物資信息列表中;單擊已刪除物資后面的“恢復”超級鏈接可以取消對該物資的刪除,此時該信息將顯示在未刪除物資信息列表中。

    在“查看物資列表”頁面中可以找到刪除和恢復物資信息的超級鏈接代碼,如下所示。

    例程18-56:光盤\mr\18\MaterialManage\defaultroot\goodsList.jsp

    <a href="goods.do?action=goodsdel&id=<%=id%>&val=1">刪除</a>

    <a href="goods.do?action=goodsdel&id=<%=id%>&val=0">恢復</a>

    從上面的URL地址中可以知道刪除物資頁所涉及到的action的參數值為“goodsdel”,當action= goodsdel時,會調用刪除/恢復物資信息的方法goodsdel(),具體代碼如下。

    例程18-57:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    if(action.equals("goodsdel")){

         return goodsdel(mapping,form,request,response);

    }

    在刪除/恢復物資信息的方法goodsdel()中,首先需要獲取從頁面中傳遞的參數id和val,并將id的值賦給int型變量id,val的值賦給byte型變量val,賦值后將這兩個變量作為GoodsDAO類中del()方法的參數,然后調用該del()方法刪除/恢復物資信息,并根據執行結果轉到相應的頁面,刪除/恢復物資信息的方法goodsdel()的具體代碼如下。

    例程18-58:光盤\mr\18\MaterialManage\src\com\action\Goods.java

    public ActionForward goodsdel(ActionMapping mapping,ActionForm form,

                                HttpServletRequest request,HttpServletResponse response){

    int id=Integer.parseInt(request.getParameter("id"));

    byte val=Byte.parseByte(request.getParameter("val"));

    int rtn=goodsDAO.del(id,val);

    if(rtn==1){

         return mapping.findForward("goodsdelok");

    }else{

        request.setAttribute("error", "物資信息刪除/恢復失??!");

        return mapping.findForward("error");

    }

    從上面代碼中可以知道刪除/恢復物資信息使用的GoodsDAO類的方法是del()。在del()方法中首先通過Session的get()方法查詢到要刪除/恢復的物資信息,并保存到GoodsForm中,然后再使用Session的update()方法刪除/恢復物資信息,最后返回執行結果,del()方法的具體代碼如下。

    例程18-59:光盤\mr\18\MaterialManage\src\com\dao\GoodsDAO.java

    public int del(int id, byte val) {

        session = MySession.openSession(); //打開Session

        int ret = 0;

        Transaction tx = null;

        try {

            tx = session.beginTransaction();

            GoodsForm goodsF = (GoodsForm) session.get(GoodsForm.class, id);

            goodsF.setIfdel(val); 

            session.update(goodsF);

            tx.commit();

            ret = 1;

        } catch (Exception e) {

            if (tx != null) {

                tx.rollback();

            }

            return ret = 0;

        } finally {

            MySession.closeSession(session); //關閉Session

        }

        return ret;

    }

    在struts-config.xml文件中配置刪除物資信息所涉及的<forward>元素,代碼如下:

    <forward name="goodsdelok" path="/goods_ok.jsp?para=3" />

    posted on 2009-01-07 10:40 rogerfan 閱讀(280) 評論(0)  編輯  收藏 所屬分類: 【開源技術】
    主站蜘蛛池模板: 亚洲AV人无码激艳猛片| 亚洲成人在线网站| 亚洲AV无码精品国产成人| 亚洲电影免费观看| 亚洲国产超清无码专区| 亚洲美女免费视频| 亚洲乱码在线卡一卡二卡新区| 无码乱肉视频免费大全合集| 亚洲一区二区久久| 在线a毛片免费视频观看| 亚洲av无码片vr一区二区三区 | 免费看h片的网站| 亚洲最大黄色网站| 妞干网在线免费观看| 亚洲avav天堂av在线网毛片| 免费在线看片网站| 国内精品一级毛片免费看| 久久精品国产亚洲AV麻豆网站| 久久受www免费人成_看片中文| 亚洲精品又粗又大又爽A片| 亚洲福利中文字幕在线网址| 97超高清在线观看免费视频| 亚洲码一区二区三区| 免费无码黄动漫在线观看| 在线播放国产不卡免费视频| 亚洲日韩区在线电影| 在线观看无码的免费网站| 日韩精品无码免费视频| 亚洲一区免费观看| 色吊丝永久在线观看最新免费| 国产特黄特色的大片观看免费视频| 亚洲A∨无码无在线观看| 无码视频免费一区二三区| 一区二区三区免费视频网站| 久久亚洲精品无码aⅴ大香 | 日韩精品成人无码专区免费| 国产天堂亚洲精品| 亚洲日本在线看片| 免费h黄肉动漫在线观看| 99精品视频在线观看免费播放| 国产亚洲精品AAAA片APP|