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

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

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

    隨筆-54  評論-0  文章-2  trackbacks-0
     
    今天復習知識點:
    一.工作流,審批流程。舉例,比如請假流程:
      提交申請-->部門經理 -->
      后面是一層一層的審批...

      審批流轉就是把單位內部的審批電子化。經過的環節和人不一樣
       
     四點要求:

     流程定義:

    二.分頁設計
    <a href="javascript:gotoPage(1)">[首頁]</a>

    <c:if test="${pageView.currentPage gt 1}">
     <a href="javascript:gotoPage(${pageView.currentPage-1})">[上一頁]</a>
    </c:if>

    <c:if test="javascript:gotoPage(${pageView.currentPage lt pageView.totalPage})">
    <a href="javascript:gotoPage(${pageView.currentPage-1})">[下一頁]</a>
    </c:if>

    <a href="javascript:gotoPage(${totalPage})">[尾頁]</a>

    <c:forEach begin="${startPageIndex}" end="endPageIndex" var="n">
      ${n}
    </c:forEach>

    轉到:<input type="text" id="txtPageNum"/>
         <input type="button" value="Go" onclick="gotoPage(document.getElementById('txtPageNum').value"/>

    <script type="text/javascript">
      function gotoPage(pageNum){
        if(isNaN(pageNum)){
          alert("請輸入正確的頁碼");
          document.getElementById('txtPageNum').focus();
          return false;
        }
        window.location.href = getPageViewUrl(pageNum);
      }

      //提供分頁用的地址。由具體的引用頁面提供
      function getPageViewUrl(pageNum){
         return "/xxx.do?pageNum="+pageNum;
      }
    </script>

    3.Hibernate的分頁

    getSession().createQuery(//
      "SELECT COUNT(pd) FROM org.jbpm.ProcessDefinition pd")//
      .uniqueResult();

    getSession().createQuery(//
      "FROM ProcessDefinition")//
      .setFirstResult(firstResult)//
      .setMaxResults(pageSize)//
      .list();



    4.表單模板設計
     
     表單定義(FormDefinition)
         表單名稱
         所用流程
         表單代碼文件路徑
         
    保存數據:不能用ActionForm,
    表單中要填寫的數據量,數據類型未知。用原始方法
    for(Enumeration<String> e= request.getParameterNames();e.hasMoreElements();){
     String name = e.nextElement();
     String value=request.getParameter(name);
    }但是我們無法解決2個問題:
      1.保存成什么類型
      2.保存哪些參數值?
     
     解決辦法:
    Map<String,Class> fieldDefinitionList = new HashMap<String,Class>();
     
     之后在Action中可以用
     for(String name:formDefinition.getFieldDefinitionList().keySet()){
     
      String stringValue = request.getParameter(name);
     
      Class clazz=formDefinition.getFieldDefinitionList().get(name);

     }

     保存一次填寫的所有信息,就是表單實例,就是表單定義的具體實現


    明天就是JPA了,要好好休息,繼續努力,春節已過去,踏上新的起點!
    posted @ 2010-02-20 00:20 d66380022| 編輯 收藏

       今天是大年初一,趕快開學吧,每天很無聊,唯一感

    覺還有點新年的味道就是昨天公司老師帶我們去海麗

    軒吃年夜飯,兄弟還是挺多的,心情也很好的!今天

    復習OA的映射,對這不熟悉啊,還得努力。。。
    一.
    多對多:對role.java文件,其中映射文件如下:
       <set name="employees" table="itcast_employee_role">
          <key column="roleId"></key>
          <many-to-many class="Employee"

    column="employeeId"></many-to-many>
       </set>
     對員工Employee.java來說,映射文件如下:
       <set name="roles" table="itcast_employee_role">
          <key column="employeeId"></key>
          <many-to-many class="Role" column="roleId"></many-to-many>
       </set>
    一對一:員工和帳號,對于附屬類帳號,映射文件如

    下:
    <id name="id">
      <generator class="foreign">
         <param name="property">employee</param>
      </generator>
    </id>
    <one-to-one name="employee" constrained="true"></one-to-one>

    主類(employee),映射文件:
    <one-to-one name="user"></one-to-one>


    二.方法:

    /** 列表 */
        public ActionForward list(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("list"); // list.jsp
        }

        /** 添加頁面 */
        public ActionForward addUI(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("saveUI");
        }

        /** 添加 */
        public ActionForward add(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("toList");    }

        /** 修改頁面 */
        public ActionForward editUI(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("saveUI");
        }

        /** 修改 */
        public ActionForward edit(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("toList");
        }

        /** 刪除 */
        public ActionForward del(ActionMapping mapping,

    ActionForm form, HttpServletRequest request, HttpServletResponse

    response)
                throws Exception {
            return mapping.findForward("toList");
        }

    三.
    標簽復習:
    <html:form>
    <html:text>
    <html:hidden>
    <html:textarea>



    javascript復習:
    <html:link action="/role?method=del&id=${role.id}" onlick="return

    window.confirm('您確定要刪除一條記錄嗎?');">刪除

    </html:link>

    在頁面中
    <html:rewrite action="/role?method=addUi"/>

    <script type="text/javascript">
      funcion addUI(){
       window.location.href="<html:rewrite action='/role?method=addUI'";
      }
    </script>

    <srcipt type="text/java"
    <script type="text/javascript">
      funcion checkForm(form){
       if($.trim(form.name.value) == "" ){}
         alert("");
         form.name.focus();
         return false;
      }
      return true;
      }
    </script>

    四.在Action中進行驗證
    ActionErrors errors = form.validate(mapping,request);

    if(errors!=null&&errors.size()>0){
      saveErrors(request,errors);
      return mapping.findForward("addUI");
    }

    五.HQL語句

    getSession().createQuery("FROM Department d WHERE d.parent is

    NULL")//
    .list();

    六.樹形展示菜單

     List<Department> list = new ArrayList<Department>();
     printInfo(topLevel,"",list);
     return list;
    注意空格是全角空格,全角空格是中文字符,不會合

    并。

    public static void printInfo(Collection<Department>

    departmentList,String prefix,List<Department> list){
     for(Department department : departmentList){
        department.setName(prefix + "|-" + department.getName());
        list.add(department);
       
        printInfo(department.getChildren(),prefix+" ",list);
     }
    }

    今天就做到這了!
     










       

    posted @ 2010-02-16 01:06 d66380022| 編輯 收藏

        大學生創業網訊 關心蟻族就是關心我們國家的未來。青年時代的磨難和體驗直接決定10年、15年后他們的心態和價值觀。一個人青年時期總被人看不起、壓抑、仇富,等他40 歲突然成功了他幸福嗎?會回報社會嗎?他如何教育下一代?
    ■名詞解釋
    蟻族:指“高校畢業生低收入聚居群體”。該群體高知、弱小、聚居。他們受過高等教育,平均月收入低于兩千元,絕大多數沒有“三險”和勞動合同;他們平 均年齡集中在22—29歲之間,九成屬于“80后”一代;他們主要聚居于城鄉結合部或近郊農村,形成獨特的“聚居村”。
    調查,在北京的邊緣
    ■一篇報道的啟發
    在這本叫做《蟻族》的“大學畢業生聚居村實錄”出版之前,“蟻族”這個名詞基本上屬于動物學的概念。一位29歲的年輕學者帶領他的團隊經過兩年的社會 調查后,第一次將這個昆蟲的名字冠于一個年輕群體的頭上。他們高知、低收入、聚居在一起生活,像螞蟻一樣不被關注,也像螞蟻一樣全力以赴、永不言棄、不可 輕視。
    為“蟻族”著書立傳源自一場好奇的探訪。
    2007年夏天,在北大做博士后研究的廉思讀到《中國新聞周刊》里的一篇紀實報道,名為《向下的青春——“高知”貧民村調查》。報道中的主人公李竟一 年前畢業于中國農業大學,因為考研和就業雙重失敗,不得不暫住于海淀區一個叫唐家嶺的村子繼續掙扎著追求夢想。而這個村子里,和他有著相同境遇的高校畢業 生不在少數。
    “令人擔憂的現狀、年輕脆弱的心靈以及無處寄托的青春和夢想。”廉思這樣形容他解讀到的李竟。作為地地道道的北京人,也作為“80后”,他沒有想到自 己身邊還生活著這樣的同齡人。與此同時,博士后研究“社會穩定”的他又敏銳地感覺到這不僅是一個簡單的“貧民村”的問題。
    ■這也是北京
    站在唐家嶺的街道上,廉思真有點不敢相信自己的眼睛——這也是北京?擁擠狹窄的小路充斥著垃圾塵土,各種名目的小店凌亂骯臟,電線桿、墻壁上到處貼滿 了租房的小廣告:180元起,有寬帶……歡迎入住。
    “看不出任何首都的氣息,典型的城鄉結合部。可一般的城鄉結合部又不可能有這么多年輕人,而且都是學生打扮。你再看他們租住的房子,可以沒有浴室沒有 單獨的廁所,但一定有寬帶能上網。”
    廉思了解到,這些走出校園不久的畢業生基本上都是拿著一千多元的工資,租著每月三百元左右的床位,到工作單位要坐兩個小時以上的公交車。唐家嶺本村居 民有三千人左右,其余近四五萬人都屬于這個聚居群體。
    回到家廉思將“聚居村”輸入搜索引擎,結果顯示全是“少數民族聚居村”;查閱了國內外的一些相關資料也一無所獲,此時的廉思意識到,唐家嶺的年輕人們 已經形成了一個全新的生態群體。
    “大家都關心成功的人,關心精英,從大學畢業兩三年到四五年的這群人到底是什么狀態,沒有人問過他們過得怎么樣。” 從唐家嶺回來后,這些同齡人生活的場景時常在廉思眼前閃現,讓他久久不能釋懷,他決心要深入研究這個群體。
    ■政府支持的調查
    廉思開始著手組織社會調查。正當他埋頭設計問卷、確定調研地點的時候,北京市有關方面委托他就北京市大學畢業生“聚居村”問題進行專項調查。有了政府 的支持,研究工作順利開展起來。
    2008年春節,廉思帶領他從人大招募來的研究生入村調查。恰逢全國遭遇50年不遇的雪災,北京天寒地凍。在唐家嶺的出租屋內,經常是問卷還沒做完, 調研員的筆已經被凍得寫不出字來。由于年齡相仿,村里的年輕人對廉思的調研小組沒有任何抵觸,有的不僅自己接受調查,還推薦身邊的老鄉和朋友。經過一個星 期的調研,這個群體的面貌逐漸在廉思眼前清晰起來。
    在后來的調研報告里廉思這樣描述他們:他們人數眾多,大多聚居于城鄉結合部或近郊農村,已經形成了一個個自然村落。他們有的畢業于名牌高校,更多的來 自地方院校和民辦高校;有的完全處于失業狀態,更多的從事保險推銷、廣告營銷、電子器材銷售等低收入工作。他們生活條件差,缺乏社會保障,挫折感、焦慮感 等心理問題較為嚴重。他們與外界的交往主要依靠互聯網并以此宣泄情緒。
    “熱情、開朗、迷茫、彷徨。”這就是“聚居村”村民留給廉思的初次印象。調研結束后,他寫成了四萬多字的研究報告提交市委且獲得了肯定,但廉思感到自 己的使命并沒有完成。“我更關心的是他們的夢破了以后怎么樣,他們會怎么看待這個社會。他們的怨恨可能給社會帶來災難。”
    ■“蟻族”一詞的誕生
    經過進一步的資料查閱和實地考察,廉思發現國外沒有出現大學畢業生聚居現象,而國內除了北京之外,上海、廣州、武漢、西安等大城市都有“聚居村”存 在,若要深入了解他們必須組織全國范圍的社會調查,才能得出更有意義的結論。
    由于第二次調查將在深度和廣度上遠遠超過第一次,廉思決定成立課題組,招募不同領域的研究人員參與。他對前來應征的人說的很直接:“跟我干肯定沒錢也 沒名,憑的就是社會責任感和研究興趣。”
    2008年8月8日,借著這個舉國歡慶的日子,匯集了政治學、心理學、社會學、統計學、經濟學等學科的15人課題組正式成立了,廉思擔任組長,研究題 目是《潛在危機:中國“大學畢業生低收入聚居群體”與社會穩定問題研究》。
    在人文社科領域,社會調查是最花錢的。偏偏這一年廉思申報的課題沒有獲得批準,調研純屬個人行為,經費成了大難題。人大社會學系的一位教授告訴他:你要 把這個項目做下來,僅僅北京地區的調研沒有15萬絕不可能!做一份問卷的成本最少要200元,包括人工費、禮品費、交通費、誤餐費等等;北京地區至少要 500份以上的樣本量才有意義,還不包括后期研究需要支付的錄音整理費、數據錄入費……
    箭在弦上,不得不發。拿著恩師資助的3萬元啟動資金,廉思和課題組成員們立即投入到環環相銜的工作流程中。很快3萬元花光了,家人又支持了4萬元,最 終課題組僅花費7萬多元,完成了唐家嶺、小月河、馬連洼等七個“聚居村”的563份調查問卷的樣本量。
    當時課題組一位成員看了一本名叫《蟻囈》的書,講螞蟻的生活狀態,很多話和他們調查的人群非常相像,比如“我很卑微但我不卑賤”、“弱小的強者”等 等,于是他們決定用“蟻族”這個名詞替代“大學畢業生低收入聚居群體”。
    廉思沒料到,“蟻族”這個名詞在網絡上引起了極大的共鳴。網上很多人發帖“我是蟻族我報到”,還有網友寫下:“只要一個人青春過奮斗過就不會不為蟻族 的故事感動,因為我們每個人心中都有一個蟻族。”
    ◆采訪手記
    蟻族熱
    廉思說話很快,隨著“蟻族”熱度的上升,他已成為各類媒體競相拜訪的對象。他似乎想用最短的時間表述最多的記憶、感慨和思考,當然是關于“蟻族”的。 “我希望更多的人能關注蟻族,而不是我廉思。”
    《蟻族》出版后,很多80后的父母給他發郵件、打電話、網上留言。家長們告訴廉思是《蟻族》讓他們知道了遠在外地的孩子到底過著什么樣的生活。“有個 家長說,怪不得兒子堅持不讓他去住處看一眼;有個媽媽給我留言,她看了兩天一直在哭,作為一個母親,她感覺自己是那樣的無力。外地一個父輩的朋友,看了當 地報紙對蟻族的報道,打電話來問我:你幫我判斷判斷,我的孩子到底是不是蟻族?”
    聚焦難免帶來一些尷尬。廉思隨電視臺去唐家嶺拍攝,有蟻族接受采訪時說,不知道是該感謝廉思還是該責怪廉思,因為他們看見報紙報道,唐家嶺有興建白領 公寓的計劃。“如果‘白宮’(蟻族口中的白領公寓)建起來了,他們負擔不起房租的話,就不得不往更遠的地方搬。”這名蟻族不認識廉思,也不知道他就站在旁 邊。
    課題組受邀去人大、北大講座,一些天之驕子反問廉思:蟻族跟我們有關系嗎?我們有必要了解他們嗎?那里面有多少北大、人大的畢業生?
    “很多名牌大學畢業生自詡為‘社會精英’。什么是精英?精英應該負有關注社會、關懷弱勢群體的責任感。你享受的權利越多,你承擔的責任也就越大。真正 的精英應當是‘心為平民,行為精英’”。
    其實有些蟻族聚居村離北大人大并不遠,然而它們之間卻豎立著一堵隱形、堅硬的墻。要打破這些墻,讓蟻族的青春奮斗不再默默無語,廉思的路還只是剛剛啟 程。不久,全國范圍的調研即將展開,上海團隊已經從同濟、復旦、上海交大招募了四五十人,廉思等核心成員馬上開赴當地。  
    “每個城市的聚居村形態都不盡相同。上海是群租房,在中低檔小區里,一套三室一廳的房子能打出20個隔間住20個人。廣州則是城中村,緊鄰高檔住宅的 旁邊。”
    無論他們處于城市的哪一個角落,他們都在發出自己的輕吟與呼喊,你會不會去聆聽?
      生活撲面而來,夢想流離失所
    ■蟻族展示了真實的80后:迷茫、彷徨,但有夢想,有責任,在堅持
    蟻族是“80后”的群體,以22-29歲的大學畢業生為主。1999年大學第一批擴招生入學,2003年第一批擴招生畢業,融入滾滾紅塵。因為就業難 或就業差,他們向自己的師兄師姐詢問有沒有便宜的地方可以落腳。剛剛走出校園,他們渴望安全感,尋求群體認同。由于高校和大量的科技類公司集中在北京的北 部,為了節省生活成本、把握機會,他們在城市的邊緣慢慢積淀下來。
    “2003年蟻族形成聚居,兩年后有了一定規模,等2007年我第一次去調查的時候規模已經很大了。這是高等教育擴招、勞動力市場轉型等因素伴隨的產 品,正好讓‘80后’趕上了。”
    網上曾有一個流傳很廣的帖子,是“80后”描述自己的尷尬境遇:當我們上小學的時候讀大學不要錢,當我們讀大學的時候上小學又不要錢了。當我們不炒股 的時候傻子都能賺錢,當我們進股市的時候發現我們才是傻子。
    “前不著村后不著店的,就是這狀態!”廉思說社會對“80后”的定義一直偏于貶義,“最自私的一代”、“最沒責任心的一代”、“垮掉的一代”,其實作 為改革開放后出生的第一代人,他們經歷著國家的巨大變革,身上表現出來的價值觀、行為方式與生活意識都折射出中國社會特定轉型時期的變化。“80后”究竟 是一代什么人?廉思覺得“蟻族”展示了“80后”的真實面貌,“他們迷茫、彷徨,但有夢想、在堅持,而且承載了很多責任。”  
    一個來自北京農村的女孩告訴調研員,她希望自己的辛苦奮斗能讓父母有富足的晚年,能讓自己的孩子將來過上更好的生活。承載著如此責任的蟻族絕非少數。 為廉思作“聚居村民序”的鄧錕在唐家嶺住了兩年,兩年里他做過銷售、干過技術、考過研、進過傳銷,也曾創過業。他對父母隱瞞真實情況,總是報喜不報憂。
    “日子過得再苦他都沒有哭過。但是有天早上起來,同屋問他昨天晚上怎么哭那么大聲?鄧錕完全沒有印象,看看枕頭是濕的,才知道自己在夢里嚎啕。”廉思 感到心被揪得難受,蟻族是咬著牙苦撐啊!他們中的很多人都背負著整個家族的希望來到大城市打拼,中華民族的傳統在他們身上是有體現的。“他們是最真實的 ‘80后’。”
    ■蟻族基本上屬于“窮二代”群體,只能靠自己,對成功的渴望特別強烈
    2009年春節,很多蟻族因為沒錢或沒票回家,只能在聚居村里過年。大年三十的下午,廉思帶著年貨到了唐家嶺,他和十幾個“蟻族”買菜、買水果,熱鬧 地準備年夜飯。
    “我們做了一大桌的菜,擠在一個小房間里,還挺有過年的樣子。”喝著酒、嗑著瓜子,當電視機里的春晚載歌載舞時,小屋的氣氛卻漸漸變了。“我就記得當 時有幾個男孩子先后到廁所去抹眼淚了。”
    什么是真正的奮斗?從初始接觸的憐憫、同情到最終的佩服、尊重,廉思看到蟻族們確實在奮斗。“三年一輛車五年一套房”是很多蟻族的奮斗目標,夢想對于 他們來說尤其重要。
    “你問小月河的人最崇拜誰,他們肯定說王寶強。其實王寶強不是蟻族,沒受過高等教育。但他在小月河住過,而且成功了,他寫的自傳小月河的人都看。他們 對成功的渴望特別強烈,這就是支撐他們堅持下去的動力。
    調查顯示,蟻族50%以上來自農村,20%以上來自縣級市,來自省會和直轄市的僅占7%,大部分家庭的年收入不超過5萬,這說明蟻族基本上屬于“窮二 代”群體。這個群體只能靠自己。  
    不久前,廉思帶一家電視臺再度回訪唐家嶺,遇到一個就職于金融公司的北大畢業生。“他一個月掙5000還是不敢花。窮二代買房首付就交不起,要攢很多 年。城里房租1000塊,唐家嶺只要300塊。這就是現實。”
    蟻族告訴廉思“沒有比生活更現實的生活”,“生活撲面而來,夢想流離失所。”這些高度凝練的詞語全來自他們的親身感受。
    “其實‘三年一輛車五年一套房’這個夢對很多北京人來說也不敢想,但我們不去戳破這個夢,否則七八個人住一屋,七八十人用一個廁所,沒有夢怎么堅持? 他們的路是他們自己選的,我們沒有資格也沒有權力告訴他們應該怎么做。有人會勸他們為什么不回老家?面對城鄉巨大的差別,這種勸說太蒼白了。”
    有人境況好轉搬離了聚居村,有人最終放棄夢想回到了自己的家鄉。這是擺在蟻族腳下的兩條路,通往任何一個方向都是要經過一番彷徨與掙扎的。
    ■蟻族在調查中強烈質疑了他們所受的高等教育,對這個群體,社會和政府應該有所作為
    面對蟻族的調查,課題組成員時時刻刻都能感受到強烈的沖擊力,因為蟻族距離他們自己太近了。一個調研員在訪談中偶然遇到了學校的師兄——兩年前曾經是 學生會里非常活躍的人物——雙方尷尬得說不出話來。
    走出“聚居村”時,每個調研員都禁不住在心里問自己:幾年后我會不會成為他們?還有一個調研員告訴廉思,當他錯過了最后一輛返城的公交車時,他感覺錯 過了這輛車仿佛錯過了整個世界。大多數蟻族的夢能否實現誰都不敢確定。
    因為好奇,廉思走近了蟻族,在調研中跟蟻族一起吃飯、聊天、喝酒,但總感覺那里并不屬于自己。“我盡量地從蟻族的角度去看待問題,但很可能我盡全力都 做不到。蟻族是真實地生活在那里,而我們只是去體驗過后又回來過自己的生活,我們永遠是旁觀者。”
    作為一個學者,廉思感到有時自己是無力的。他能為這些平凡而又堅韌的年輕人做些什么?同情、無謂的勸解都是沒有意義的。
    “在我們的調查卷里有一個問題,問蟻族覺得高等教育給他們帶來了什么?選項有知識技能的提高、文化水平的提高,還有自身素質、道德修養、人際交往等 等,可他們只選了最后一項‘一張文憑’。當問到高等教育缺失什么的時候,他們把以上幾項全選上了。大學生們走上社會才知道自己真正需要什么,這些是高等教 育應該反思的東西。”蟻族的身上可能存在著欠缺,但未必是他們個人原因造成的。
    雖然廉思認為蟻族內心的力量遠比自己要強得多,但他們真實的生活境遇的確令人擔憂,他們應該得到社會的傾聽與關注。
    “對這個群體,社會和政府是可以有所作為的。比如短期內幫他們整治環境和治安,讓他們生活好一點,還可以安裝一些避孕套機等等。中期來說落實一些民主 權利,讓他們參與投票。設立一些文體設施,進行職業培訓。長遠的一些問題則需要逐步立法解決,比如廉租房制度,目前沒有北京戶口是享受不到的。還有高等教 育擴招問題,用不用擴招、擴招多少;民辦教育的規模問題,蟻族中37%來自民辦大學,好多是被騙來的,這些都需要經過慎重討論最后出臺措施。”
    廉思并不掩飾他的憂慮,“關心蟻族就是關心我們國家的未來。青年時代的磨難和體驗直接決定10年15年后他們的心態和價值觀。一個人青年時期總被人看 不起、壓抑、仇富,等他40歲突然成功了他幸福嗎?會回報社會嗎?他如何教育下一代?這才是值得思考的。”

    posted @ 2010-02-13 00:30 d66380022| 編輯 收藏

         昨天把表單定義的映射文件做完了,今天依然是相當重要的,做的是單向表單實例映射,首先表單實例映射文件。

    難點1map的配置:

    <map name="propertyMap" table="itcast_formInstance_propertyMap">

              <key column="formInstanceId"></key>

              <map-key type="string" column="name"></map-key>

               <element type="serializable" column="value"></element>

           </map>

    為什么要實現serializable,所有的數據都是以二進制形式存在,所有的對象理論上都可以序列化,但是有些對象序列 化后會產生比如邏輯等等問題。在這里我們希望服務器重啟后,仍然保存有我想要的對象,也就是可以把原來的對象拿出來!就要實現序列化 ,同學的序列化解釋:

    我們有時候將一個java對象變成字節流的形式傳出去或者從一個字節流中恢復成一個java對象,例如,要將java對象存儲到硬盤或者傳送給網絡上 的其他計算機,這個過程我們可以自己寫代碼去把一個java對象變成某個格式的字節流再傳 輸,但是,jre本身就提供了這種支持,我們可以調用OutputStreamwriteObject方法來做,如果要讓java幫我們做,要傳輸的對象必須實現serializable接口,這樣,javac編譯時就會特殊處理。             

    2是定義FormDefinitionActionForm。由于表單字段可以增加,如圖:

    我們用兩個數組存放

     private String   propertyNameList = {};

     private Class[] propertyValueTypeList = {};

    3.那我們就在FormDefinitionAction

    可以這樣處理:

                  // actionForm --> formDefinition

                  // 1, copy properties

                  BeanUtils.copyProperties(formDefinition, actionForm);

                  // 2, fieldDefinitionList

                  for (int i = 0; i < actionForm.getPropertyNameList().length; i++) {

                         String name = actionForm.getPropertyNameList()[i];

                         if (name != null && name.trim().length() > 0) { // 有效的字段說明

                                Class valueType = actionForm.getPropertyValueTypeList()[i];

                                formDefinition.getFieldDefinitionList().put(name, valueType);

                         }

                  }

                  // Save

                  formDefinitionService.save(formDefinition);

                  return mapping.findForward("toList");)

    小難點3.要把不同的表單定義名稱顯示到頁面

     Sql語句:select distinct pd.name ProcessDefinition的全類名pd

    小難點4.頁面設計

    難點5.審批信息內容:誰 什么時間 對哪個表單 做了什么樣的審批

    難點6.整個實體類圖及關聯

         

    最重要的還是下圖的關系:要理解好


     

    總之,今天下午聽的暈乎暈乎的,趁過年還得好好復習一下!

        


    posted @ 2010-02-09 00:12 d66380022| 編輯 收藏

        

                                          OA項目之審批流轉

     今天是OA項目的最后一個模塊,其業務流程是員工提交申請-à部門經理-à ,這期間要經過的人不一樣,有的要經過一個審批就OK了,而有的得經過3個以上的人審批才行。實現審批流轉有4個要求:

     1.方便的定義/x修改  管理 流程定義

     2. 方便的定義/x修改  管理 表單模版

     3.執行審批流轉

     4.方便的查詢所有的 表 單實例 (數據)記錄(查詢流轉過的表單)

    業務流程如同前天已畫的圖:

    員工提交申請,后面的環節就會按照我們定義 好的流程走了

    所有的表單都要分頁

    今天做審批管理,它包含審批流程管理和表單 模版管理

     1.設計實體,

     2.創建一個Action ,也和前面的一樣CRUD,只是在列表時加了個分頁,多添

    加了個查看流程文件(processdefinition.xml) 中,查看流程圖片

     3.分頁設計:因為所有頁面都要用,所以寫成公共的,但超鏈接不一樣

    如圖:

    分頁主要代碼:

    // 用戶指定

           private int pageSize;

           private int currentPage;

           // 查詢數據庫

           private int recordCount;

           private List recordList;//當前頁的所有pd

           // 計算

           private int totalPage;

           private int startPageIndex;

           private int endPageIndex;

           /**

            * 計算指定頁中第一條記錄的索引

            */

           public static int clacFirstResult(int pageNum, int pageSize) {

                  return (pageNum - 1) * pageSize;

           }

           public PageView(int pageSize, int currentPage, int recordCount, List recordList) {

                  this.pageSize = pageSize;

                  this.currentPage = currentPage;

                  this.recordCount = recordCount;

                  this.recordList = recordList;

                  // 計算 totalPage, startPageIndex, endPageIndex;

                  totalPage = (recordCount + pageSize - 1) / pageSize;

                  startPageIndex = 1;

                  endPageIndex = totalPage;

                  if (totalPage > 10) {

                         // 正常顯示當前頁附近的共10個頁碼,當前頁屬于前半部分

                         startPageIndex = currentPage - 4;

                         endPageIndex = currentPage + 5;

                         // (前面不足4)顯示前10個頁碼

                         if (startPageIndex < 1) {

                                startPageIndex = 1;

                                endPageIndex = 10;

                         }

                         // (后面不足5)顯示后10個頁碼

                         else if (endPageIndex > totalPage) {

                                endPageIndex = totalPage;

                                startPageIndex = totalPage - 10 + 1; // 顯示時包含開始與結 束的邊界

                         }

                  }

           }

    之后測試分頁

    4.解決session問題:

     由于在action中用到了sessionjbpmContext,必須用一個session,才能保證是同一事務,在這里用jbpmContext得到session

    5.Hibernate關于set list map的映射文件

    以為例

    class Person{

           private Set<String> addressSet; // 收貨地址

           private List<String> addressList;

           private Map<String, String> phoneNumberMap; // 電話號 集合,如:家庭 -- 010-12345678

    }

    <set name="addressSet" table="itcast_addressSet">

           <key column="personId"/>

           <element type="string" column="address"/>

    </set>

    <list name="addressList" table="itcast_addressList">

           <key column="peronId"/>

           <list-index column="idx">

           <element type="string" column="address">

    </list>

     

    表單流轉

    支持各種審批流程:JBPM

    支持各種表單定義:表單中要填寫的字段的數 量不同,類型也不一樣,ActionForm當然不能用,按照上面的業務需求實現編碼。


    明天繼續!


    posted @ 2010-02-07 23:46 d66380022| 編輯 收藏

        趁今天休息,把昨天不會的知識總結一下,這幾天小湯給我們帶項目,給大家的感覺就是老師水平很高,我們還得苦修幾年才行啊,小湯經驗挺豐富的,以至于我們 遇到問題時,他一問這個對象可以有嗎?下面萬籟無聲時,小湯一般就說“這個可以有”,好了,還是總結知識點吧:
    1.HIbernate創建查詢,首先拿到session,再
     List list = session .createQuery(//
                      " FROM Department d WHERE d.parentId = ?")//
                     .setParameter(0,值)//
        .list();
    之后測試,一般對于CRUD操作,都要單元測試。
    注意:
      用//格式固定格式,Hibernate源碼就是這樣固定格式的
    2.用到的標簽(不熟練的)舉例:
    <html:link action="/dept?method=editUI&id=${department.id}">修改< /html:link>
    <html:link action="/dept?method=del&id=${department.id}&parentId=${parent.id}" onclick="return window.confirm('您確定要刪除這條記錄嗎?')">刪除</html:link>

    3.外鍵可以為空

    4.游離:數據庫中有,但沒有和session關聯,Hibernate根據id判定是否是游離狀態,如果你id有值 ,則不是游離。
    我在網上查了一下什么是游離對象?
    游離對象的特征。游離對象具有以下特征:
    (1) 不再位于Session的緩存中,也可以說,游離對象不被Session關聯。
    (2) 游離對象是由持久化對象轉變過來的,因此在數據庫中可能還存在與它對應的記錄(前提條件是沒有其他程序刪除了這條記錄)。

    游離對象與臨時對象的相同之處在于,兩者都不被Session關聯,因此Hibernate不會保證它們的屬性變化與數據庫保持同步。游離對象與臨時對象 的區別在于:前者是由持久化對象轉變過來的,因此可能在數據庫中還存在對應的記錄,而后者在數據庫中沒有對應的記錄。

    Session的以下方法使持久化對象轉變為游離對象:
    (1) 當調用Session的close()方法時,Session的緩存被清空,緩存中的所有持久化對象都變為游離對象。如果在應用程序中沒有引用變量引用這 些游離對象,它們就會結束生命周期。
    (2)Session的evict()方法能夠從緩存中刪除一個持久化對象,使它變為游離狀態。當Session的緩存中保存了大量的持久化對象,會消耗 許多內存空間,為了提高性能,可以考慮調用evict()方法,從緩存中刪除一些持久化對象。但是多數情況下不推薦使用evict()方法,而應該通過查 詢語言,或者顯式的導航來控制對象圖的深度。

    感覺這段話說的挺好的,就copy下來

    5.注冊時間轉換器
       轉換器為便于在項目中易于維護,放在一個Servlet中,然后將Servlet配置在web.xml中
    時間轉換器:
    Java代碼
    package cn.itcast;   
    import java.text.ParseException;   
    import java.text.SimpleDateFormat;   
    import java.util.Date;   
     
    import org.apache.commons.beanutils.Converter;   
     
    public class UtilDateConverter implements Converter {   
     
        private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");   
     
        public Object convert(Class type, Object value) {   
            if (value == null) {   
                return value;   
            }   
            if (value instanceof Date) {   
                return value;   
            }   
            if (value instanceof String) {   
                try {   
                    return format.parse((String) value);   
                } catch (ParseException ignore) {   
                }   
            }   
            return null;   
        }   
    }  

    Servlet類:
    Java代碼
    package cn.itcast;   
    import java.util.Date;   
    import javax.servlet.ServletException;   
    import javax.servlet.http.HttpServlet;   
     
    import org.apache.commons.beanutils.ConvertUtils;   
     
    public class InitConvert extends HttpServlet {   
        @Override   
        public void init() throws ServletException {   
            //注冊轉換器   
            ConvertUtils.register(new UtilDateConverter(), Date.class);   
        }   
    }  

    web.xml配置:
    <servlet>
        <servlet-name>InitConvert </servlet-name>
        <servlet-class>cn.itacst.InitConvert </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
     
    6. ActionForward 動態傳參問題:
      ActionForward af = mapping.findForward(“toList”);
    return new ActionForward(af.getPath+"&parentId="+af,af.getRedirect);



    好了,今天就寫到此吧,明天還要上課,睡了!





































    posted @ 2010-02-07 00:25 d66380022| 編輯 收藏
    今天繼 續OA工作流,今天完成部門添加工作,創建子 部門,員工管理等操作

    1.部門管理

    部門的CRUD操作和完善

       列 表:

          頂層部門或顯示指定部門的子部門

    1. 添 加子門和添加同級部門是同一個添加

    1.取出所有的最頂層部門,使用遞歸,遍歷所有部門, 名稱前面加上空格。

    2.當前要處理的部門的名稱比上一級部門多一個空格。

    效果:

    A1

     A2

    B2

     B1

     B

     B3

    之后存到作用域中,這個遞歸要放到Action中進行。

    posted @ 2010-02-06 00:23 d66380022| 編輯 收藏

    OA工作流第二天

       再有幾天過年了,心情好。今年過節不回家,明年掙錢了再回,其實車票也很不好買的,以至于車票是近 幾天的焦點。。。今天是OA項目的第二天,湯兄帶我們做了崗位管理模塊,我們是從對象到表進行設計,這就是所謂的正向工程。

    整體設計步驟:

    一、當然是根據需求設計實體,實現功能:

    1.了解需求

    2.設計實體(設計數據庫表) 對象-->

    3.分析功能的流程

        1.整體。2.具體(部分)

    二、編碼實現,單元測試

    1.準備編碼:創建Action,與Service接口、實現類(空)。

                       完成Action中的方法聲明與返回值。()

    2.完成Action的方法,確定出所用的Service方法,在Service接口中聲明他,并寫好注釋。

        1.獲取參數

        2.調用業務方法

        3.返回一個顯示

    3.完成Service的方法實現,實現要求的功能。確定出Dao中的方法,在Dao接口中聲明他,并寫好注釋。

    4.完成Dao的方法的實現。

    (為某些ServiceDao寫單測試)

    三、頁面顯示層顯示效果

    1.寫頁面(Jsp,把靜態頁面改為動態頁面)。

    2.寫配置

    3.測試運行

    具體設計

    步驟:1.設計實體,有部門員工崗位賬號四個實體。

    實體之間的關系,實體中的屬性。

    如下圖:

    一個關系,就是一個外鍵

    2.接著就是設計映射文件:

    多對一:<many-to-one name class column=”外鍵”/>

    一對多:<set name=”bean中的set屬性名”>

             <key column=”外鍵”/>

                   <one-to-many class/>

            </set>

    一對一:1.主鍵關聯

    關鍵表:<one-to-one name=” 與之關聯的在本類中的屬性名”/>

      附屬表:

    <one-to-one name=” 與之關聯的在本類中的屬性名” constrained=”true”/>

              <id name="id">

             <generator class="foreign">

              <param name="property">與之關聯的在本類中的屬性</param>

             </generator>

          </id>

             2.外鍵關聯

    關鍵表:<many-to-one name=” 與之關聯的在本類中的屬性名” column=”” class=”” unique=”true”/>

       附屬表:

    <one-to-one name=” 與之關聯的在本類中的屬性名” class=”” property-ref=” 對方類中關于本類的屬性名”/>

    多對多:<set name table="關系表">

                         <key column="本表的id(比如roleId)"></key>

                           <many-to-many class="與之關聯的類名" column="與之形成關系的id(比如employeeId"></many-to-many>

                  </set>

    Employee.hbm.xml為例,只寫 關聯關系的

    <!-- department的多對一 -->

                  <many-to-one name="department" class="Department"                   

    column="departmentId"></many-to-one>

                  <!-- roles的多對多 -->

                  <set name="roles" table="itcast_employee_role">

                         <key column="employeeId"></key>

                         <many-to-many class="Role" column="roleId"></many-to-many>

                  </set>

                   

                  <!-- user的一對一 -->

                  <one-to-one name="user"></one-to-one>

    其他的也是如此寫。

    如果還不明白,請與我聯系,我給你源碼。本 人qq510570367

    3.業務流 程

     struts控制流轉,jsp顯示,完成CRUD操作。剩下的就是代碼的編寫了。。。

    注意:

    1.在開發中一定要使用自定義標簽,可以很 好的處理回顯問題:回顯對應的formBean中對應的字段

    2. 寫關鍵的代碼時,一定要測試。

    今天就Ok了,明天繼續!

        


    posted @ 2010-02-04 20:12 d66380022| 編輯 收藏

         今天在班上上自習,有幾點得備份一下,老忘記:1.是讀取Properties文件的方法;2.是Eclipse快捷鍵的單詞補全;3.是一點生活感觸

         1.讀取Properties文件的方法

          Properties props = new Properties();

          InputStream is = 當前類.getClass().getResourceAsStream("/文件所在路徑");//注:"/"表示根路徑(classes)

         props.load(is);


       在需要使用屬性文件的時候,直接 props.getProperty(" 屬性文件中的name");再強轉一下就搞定了。。.


      2.這是轉老師的,盡管我以前也常用單詞補全的快捷鍵,我是“Alt+c”,但我從未總結過,這次拿老師的曬曬

     Eclipse的快捷鍵設置或修改方法:

    1,打開快捷鍵設置窗口。有兩種方法:
       a) Window -> Preferences, General -> Keys.
       b) 連按兩次'Ctrl+Shift+L'。

    2,找到要修改快捷鍵的功能。在右側窗口的"type filter text"文本框里輸入查
    詢的字符串,匹配結果會在下方列出。有兩種查詢方式:
       a) 輸入功能名,如"Content Assist"(不含引號).
       b) 輸入綁定的快捷鍵名,如"alt+/"(不含引號).

    提示:如果沒有查到相應的功能,選中列表下方 的"Include unbound commands"試試,這個表示把未綁定快捷鍵的功能也列出來。

    3,綁定新的快捷鍵。選中要設置快捷鍵的功能,在下

    方的"Binding"中就會顯示當前綁定的快捷鍵。點擊"Binding"后的文本框,讓其得到焦點,用"Backspace"
    (退格鍵)刪除現在正在綁定的快捷鍵,然后直接按快

    捷鍵即可(如要修改為
    "alt+/",是在按住"alt"鍵的同時按"/"鍵,而不是輸入字符串

    "alt+/")。

    --------------------------------------------------

    需要修改的快捷鍵:
       我們習慣使用自動補全的功能叫做"Content Assist",他的默認快捷鍵是"Ctrl+space",和輸入法有沖突,所以不能使用。一般習慣把他改為'Alt+/',但"Alt+/"和功 能"word completion"(單詞自動補全)的快捷鍵重復,所以還要把"word completion"的快捷鍵改掉,一般改為'Alt+C

    3.一些生活感觸

         我們今天上午到附近轉了一會兒,我看到了這有一胡同里的房子頂全是石棉瓦蓋的,真讓我對北京失望極了,走出胡同,確切說是走過公路,發現公路兩邊是截然不 同的兩片天空,那邊全是很豪華的小區。。。差距也忒大了...

        

     努力,向前看!   

        


    posted @ 2010-02-03 22:12 d66380022| 編輯 收藏
           OA工作流()筆記

       今天開始項目之旅,做的第一個項目是OAOAOFFICE AUTOMATION的縮寫,是利用技術提高辦公的效率,從而實現辦公自動化。湯兄給我們對OA整體做了介紹,還介紹了需求,OA在整體上實現起來是一樣的,只是根據企業的需求,業務不同,實現不同而已。當然OA項目分了很多模塊,沒時間做太多模塊,我們只做核心的模塊。第一天主要是搭建環境和基礎功能的實 現。

     下 面總結一下一天所學知識

    該系統的使用者是員工(使用者)和管理員(管理系統)

    1.組織機構管理(部門、崗位、員工)

    2.審批流轉

    1審批管理

    2執行審批流轉

    3表單查詢

    3.根據實際,使用兩層:

    1表示層(view

    2業務邏輯層(Service + DAO

    4.所使用的框架和技術

     Struts 1.3.8 Jstl 1.1 Hibernate 3.2.3 Jbpm 3.2.2(工作流) Junit4 jQuery

     

    5. 搭建環境

    1.       添加Struts 1.3.8jar包與配置文件

    2.       添加Jbpmjar包,同時也會添加Hibernatejar包。再添加相應的配置文件(jbpm.cfg.xmllog4j.propertieshibernate.cfg.xml)

    3.       添加JDBC驅動的jar

    4.       創建的數據庫。修改Hibernate.cfg.xml中的數據庫連接信息,并創建數據庫表。

    5.       添加Junit4jar

    6.       解決Struts中的commons-BeanUtils.jarHibernate中的commons-Collections.jar的沖突問題。

    DAO層設計

    對一些dao,有公共的 方法,可以寫一個BaseDao ,讓UserDaoRoleDao繼承BaseDao

     

    Service層 設計   



    在Service層 直接操作數據庫

    解決提交的表單內容的中文亂碼

    所有的頁面都將使用utf-8編碼,所以提交的表單內容也是utf-8編碼。

    在過濾器中設置request的編碼為utf-8:

    最后解決:統一業務操作中的Dao操作要使用統一session

       統一的管理session的打開關閉與事務的開始提交

     總之,今天學到的東西挺多的,受益匪淺啊!也有些感覺以前的知識已有些淡忘,還是得復習復習了。。。

    posted @ 2010-02-02 21:23 d66380022| 編輯 收藏
    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: 免费播放特黄特色毛片| 亚洲中文字幕无码中文字在线| 亚洲国产精品嫩草影院在线观看| 亚洲午夜日韩高清一区| 国产亚洲福利精品一区| 精品乱子伦一区二区三区高清免费播放 | 亚洲高清无码专区视频| 337P日本欧洲亚洲大胆精品| 国产日韩久久免费影院| 在线观看亚洲成人| a级毛片免费完整视频| 久久久久亚洲精品成人网小说| 亚洲一级毛片在线观| 日韩版码免费福利视频| 一区二区亚洲精品精华液| 国产精品va无码免费麻豆| 日韩在线视频线视频免费网站| 久久亚洲2019中文字幕| 久久中文字幕免费视频| 亚洲特级aaaaaa毛片| 国产自产拍精品视频免费看| 成人免费网站久久久| 亚洲av午夜福利精品一区人妖| 99视频在线精品免费| 亚洲色偷偷色噜噜狠狠99| 亚洲国产综合精品一区在线播放| 亚洲另类古典武侠| 免费爱爱的视频太爽了| 亚洲国产精品午夜电影| 青青操视频在线免费观看| 亚洲一区免费观看| 成人人观看的免费毛片| 在线播放免费人成视频网站| 亚洲第一视频网站| 四虎成人免费网站在线| 二区久久国产乱子伦免费精品| 国产又黄又爽又猛的免费视频播放 | 4虎永免费最新永久免费地址| 亚洲成aⅴ人片久青草影院按摩| 亚洲视频免费在线看| 亚洲αv在线精品糸列|