EOS新手入门
- 格式:doc
- 大小:681.50 KB
- 文档页数:16
EOS开发EOS的页面流是从action0进入,基本组成是:页面流(包含页面,逻辑流),逻辑流(包含运算逻辑),页面流相当与java程序中的一个Action包,逻辑流相当与service方法,运算逻辑相当于DAO层.EOS中绿色的线表示action的方向,绿线名就是action的name,EOS中的form表单标签是<h:form >该标签的元素action中填写页面流的全名,提交action有2种方式:action=”页面流全名?_eosFlowAction=你的action名称(绿线名)”,或者在表单中加上一个input标签,type=”hidden” name=”_eosFlowAction” value=”action名称”,以上是EOS基本了解,下图是EOS与JA V A程序对照:因此EOS中各个组件中参数的传递可以按照java中action-->service-->dao来进行配置.基本参数:page、criteriaType、DataObject关键字page:page是EOS中封装的一个PageCond类的对象,使用该对象后,分页不需要任何代码,在进行分页查询时只需要传入一个PageCond对象参数,并给这个对象,page对象中有几个属性在帮助文档中有,不列出,最重要的就是isCount这个属性,在查询时给这个属性赋值为true,然后再将该对象返回,那么在页面中就可以得到分页信息。
关键字criteriaType:查询实体,相当与HQL语句中from 后面的实体类以及条件,没有条件就是查询全部,功能很强大,它可以封装数据类实体和查询条件。
关键字DataObject:相当与JA V A中的Obejct这个类,在EOS中DataObject相当与一切类的父类,当然它是Object的子类,DataObject这个类用起来十分方便。
1.查询全部EOS中的<l:iterate property=””id=””>是遍历标签,用<b:write iterateId=””property=””>来接收遍历值,id与iterateId一致。
查询必须参数,查询实体,EOS中的查询实体名就是创建的数据实体名,打开数据库资源管理,创建玩数据集后,将数据库资源管理中的表直接拖到数据集空白处,即可生成,注意如果有主键自动增长的,需要将该数据实体双击点开,将主键生成策略改为数据库生成,定义一个逻辑流,逻辑流最基本模式如下图所示:逻辑流空白处双击打开参数配置框,上面的变量定义相当与java方法中的局部变量,下面的参数配置表中参数相当与java方法中的参数,返回值就是我们需要该方法返回的数据,由于查询全部因此不需要输入参数;还需要给查询实体赋值,EOS中赋值方式不是”.”而是”/”,双击赋值组建,左值输入查询实体对象,斜线,会出现很多单词,_entity这个表示该查询实体的数据实体类,如图:右值就是数据模型中数据实体类文件的全名(右键-->复制全名),在运算逻辑中找到所需要的方法,选定,则该方法所需要的参数类型和返回值类型就自动出现;选用查询方法,在DatabaseUtil中找到queryEntitiesByTemplate方法,DatabaseUtil中封装了很多查询方法,根据这些方法的名字,我们大概能看出这些方法的作用。
下面是queryEntitiesByTemplate方法中的输入参数和输出参数dsName,在安装EOS时有一步提示数据源名称,我改为default,因此这个地方填写为default,Template就是查询模板,模板就是所需要查询的实体类的名称,返回值depts就是我们需要的Dept这个类的所有数据了,在查询到了数据集合后,我们需要在页面上显示,可以自己去遍历获取,EOS中封装了一个jsp标签viewlist,将该标签直接拖到jsp页面,选择数据实体中找到你需要的数据实体,按自己需要编辑实体属性列表,提交是后面进行删改时需要的,进入jsp页面找到<l:iterate>这个标签,将property改为逻辑流的返回值。
这个标签中封装了例如新增、修改、删除这些事件,我们不需要在jsp页面中去编写绑定数据的事件函数,只需要在页面流中去编写增删改的逻辑流操作,这些绑定都是通过checkbox,SubmitXpath就是这些事件执行时所提交的值,默认情况下selectedObjects中只有被选中行的id,可以自己修改,生成的jsp代码如下:这是后话,于是一个查询全部的流程就结束了。
2.删除在1中提及到<w:rowCheckbox>这个标签,里面的<h:param>的name就是点击删除时提交到删除逻辑的数据,对于删除只需要一个id,上面写到该实体类的所有属性是为了更新时提取数据而不用再次查询,同样编写一个删除逻辑流,输入参数就是deleteDepts了,在运算逻辑中找到deleteEntityBatch这个方法,该方法的输入参数是一个dataObject数组,因此在删除的action上将数组勾上:删除逻辑流中的参数:删除运算逻辑中的参数然后将连接线指向查询就可以完成删除步骤。
3.更新更新提交的数据也是<w:rowCheckbox>中的数据,在rowCheckbox的param中设置需要更新的字段,点击更新时,action中传出的数据就是param中的字段,然后在另一个页面接收更新的原数据,更改数据后,将更新的数据封装在一个Dept实体对象中传入逻辑流,在逻辑流中选择updateEntity这个方法,在EOS中DataObject相当与java中的Object因此updateDept这个Dept数据实体类可以直接传入,于是更新完成。
4.添加添加也很简单,写一个表单,将数据属性封装在需要保存的实体类对象中,将该对象传入逻辑流,saveEntity方法即可。
5.条件查询在HQL查询中比如说:from Dept where deptName = ?,那么Dept就是criteriaType对象的entity属性,deptName就是criteriaType的expr属性,criteriaType并不只是表示查询的数据实体,它还包括查询条件,在条件查询中,我们要给criteriaType对象赋值,双击赋值,填写criteriaType对象,再加上“/”会出现很多单词,_entity表示查询实体,_expr表示查询字段,如果有多个查询字段在expr后面带上”[1]”(中括号中数字依次增长),_op代表查询条件是>、<、=、between、like等,expr后面跟着的是实体类中的属性名,右边的是输入的查询值,在between中右边的值无意义,而是设置的_min、_max属性,相当与date between queryData/startTime and queryData/endTime,前面的就相当与deptno = queryData/deptno;以上只是举出查询的形式,其他的和这类似;6.分页分页在EOS中就显得很简单了,只需要一个pageCond对象就行了,在查询逻辑中选用.....withPage的方法,将page属性传入,在初始时要赋值page/isCount=true,然后再查询逻辑中还要将page对象返回,page的属性不列出,帮助文档中有,如果在页面中分页信息不正确,那么说明page对象的输入输出或者赋值出了问题。
输入page,page中已经赋值page/isCount=true还要返回page7.命名SQL对于有些情况下也可以自己写sql语句来查询,在EOS中有com.eos.foundation.database.DatabaseExt.queryByNamedSql这个方法,这个方法是支持命名SQL的,nameSqlId就是命名SQL的位置。
需要传入命名SQL集,新建一个命名SQL集,parameterObject可以是Map集也可以是单个属性值,若有多个查询字段,用Map形式赋值,将Map对象传入,命名SQL中##中的值就是Map集中key,定义一个Map给Map对象赋值,因此在命名SQL中##中间的就是param斜线后面的字段。
8.EOS中的一些常用JSP标签8.1.queryForm在组合标签中将queryForm拖入jsp页面,查询实体名称中的criteria就是传入查询逻辑流的参数,里面封装好了_entity和_expr以及_op 若全部都是数据实体中有的属性,那么逻辑流中不需要赋值,若是数据实体中没有的属性,那么最好自己手动去设置,比如说在查询实体中一个时间字段在两个时间之间时,那么startTime和endTime在数据实体中并没有,于是最好自己手动添加,将查询数据封装起来,然后再手动赋值。
8.2.viewListviewList用来接收查询结果,boSelectcomboSelect是动态级联下拉列表,底层是用ajax处理,因此在页面流中无需添加逻辑流,jsp页面加载了该标签时会再后台进入逻辑流,动态级联中需要2个查询,因此先编写2个逻辑流,一个肯定是查询全部,令一个就是根据第一个选择的字段来查询它与令一张表中关联的数据,这是第一个下拉列表,还要设置令外一个下拉列表,在关联ID中加上父列表的id,查询时用的时命名SQL,命名SQL中若不是查询单表的全部字段,那么在获取值时要用大写形式表示,传入逻辑流中的参数就是父列表中的XPath中的值,类型为数据实体类,然后用命名SQL 查询。
8.4dataCell这是一个”一对多”的情景,父表中是球员列表,每个球员都效力1支以上的球队,子表中就是父表中被选中行的球员效力过的球队,dataCell效果图如下所示:点击任意一行,下面就会显示查询信息,dataCell有2种,静态和动态,静态的意思是在一个逻辑流中把2个列表的所有信息全部查询出来,点击任意一行时其实是在原来查询出的数据中取值而已;而动态就是一个逻辑流负责查询父表中的所有数据,点击任意一行时根据传入的值再取另外一个逻辑流查询;这有点像Hibernate中的缓存,静态dataCell相当与在缓存中去取值,不用去数据库中查;动态就是点击一行就发送一次查询语句;这只是情景有点类似。
8.4.1.静态静态dataCell是先将父表所有数据查询出来,然后通过循环父表的id获取每条数据对应的“多”端的数据集:在变量定义中定义一个数据实体类对象,将查询出来的所有员工进行遍历,用定义的变量去接收遍历的值,在循环中把每次遍历出的对象的id传入进行查询“多”端数据。