随笔-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 下一页