CZTZ-JavaEE开源应用开发平台介绍(2)
第二部分 平台开发示例(上)
王保政
QQ:29803446
Msn:baozhengw999@hotmail.com
本文介绍如何利用应用开发平台实现一个后台增删改查的应用。以B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>网站的个人用户帐号为例。
企业应用的用户有B2B类用户(如企业内网用户),也有B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>类用户,即通过公司的外网门户注册的个人帐号,例如公司的网上商城注册会员。
本例的个人用户帐号表为eas_b2cuser,主要数据库字段有:
obj_id varchar(40) 唯一ID字段(隐藏字段,不需要用户输入数据,系统自动生成ID)
user_id varchar(30) 登录帐号
user_name varchar(30) 用户名称
is_enabled int 是否可用,0表示不可用1表示可用
user_type varchar(16) 标识是个人注册用户还是企业注册用户,可从数据字典取编码
sys_code varchar(16) 此用户隶属的应用系统,应用系统编码也从数据字典获取.
下面是其他隐含字段:
row_id varchar(40) 唯一行号
sort_no int 记录排序号
create_dt varchar(23) 创建时间
create_uid varchar(40) 创建人帐号
update_dt varchar(23) 最后修改时间
update_uid 最后修改人帐号
在数据库表设计好以后,按下面的具体步骤操作:
一、 通过MyEclipse工具将指定的数据库生成对应的POJO类和hbm文件,此表对应的hbm文件和POJO类已经生成,分别是org\apache\easframework\core\entity\ EasB2cuser.hbm.xml和同目录下的EasB2cuser.java文件,可在WEB-INF\lib\ eas-core.jar中找到这两个文件,由于本平台已经生成了这两个文件,所以可进行下一步。
二、 这一步需要在配置文件中配置hbm.xml文件,见WEB-INF\classes目录下的datasource.xml,,这里配置了大量的hbm.xml文件:
<property name="mappingResources">
<list>
<value>org/apache/easframework/core/entity/EasB2cuser.hbm.xml</value>
…
</list>
</property>
由于这一步也已经配置好了,所以大家可直接看下一步。
三、 在实体容器类org.apache.easframework.core.entity.EntityContainer中声明EasB2cUser类变量(此容器也主要是为了webwork的前台页面的实体变量在BaseAction中能自动找到对应的实体类,以便BaseAction能自动将不同的实体类的值插入到相应的数据库表),EntityContainer.java中增加的代码如下:
private EasB2cuser easB2cuser;
public void setEasB2cuser(EasB2cuser entity)
{
this.easB2cuser = entity;
}
public EasB2cuser getEasB2cuser()
{
return this.easB2cuser;
}
本平台已增加了上述代码。在实际开发中,以上的步骤作完后要用ant运行一次编译部署脚本。在本示例中上述步骤已经完成,大家可从下一步骤开始正式自己动手来实现一个增删改查功能(带翻页的,不用写一行翻页代码,很酷的哦),由于本文书写的时候模板生成器还没做完,等做完后,下面的步骤基本都省略了,用户只需要通过配置工具来生成功能页面,可以自己定义列表页面要显示的数据项,自己定义查询列和排序列,等等。看下一步骤。
四、 配置xwork.xml:
在WEB-INF\classes目录下有一个xwork.xml文件,打开此文件,找到下面一段代码:
<action name="listEasMetaColumn" class="org.apache.easframework.core.webwork.action.BaseAction">
<result name="input">/module/platform/editEasMetaColumn.jsp</result>
<result name="success">/module/platform/listEasMetaColumn.jsp</result>
<result name="select">/listEasMetaColumn.action?operate=selectPageList</result>
<result name="edit">/module/platform/editEasMetaColumn.jsp</result>
<result name="showList">/module/platform/listEasMetaColumn.jsp</result>
<param name="serviceName">DBSupportService</param>
<param name="keyFieldName">objId</param>
<param name="entityClassName">org.apache.easframework.core.entity.EasMetaColumn</param>
<param name="codeColumns"></param>
<param name="sortColumns"></param>
</action>
上面的配置是一个维护表字段信息的功能。可在此段代码下复制上面的代码,更改相应的配置。这里要注意一下命名规则,name="listEasMetaColumn"是一个action的名字,在页面上可以通过http://host:port/myapp/listEasMetaColumn.action的格式访问,list是动作,后面的是实体类名,jsp文件的命名也是动作名+实体类名,例如列表页面为listXXX.jsp,编辑页面是editXXX.jsp,本例要配置的是EasB2user的功能,对应的表是eas_b2cuser,所以列表页面的命名为listEasB2cuser.jsp,编辑页面的命名为editEasB2cuser.jsp。
DBSupportService是一个通用的封装了增删改差的基础业务逻辑类,当然实际开发可以从此类继承,一般没有特殊处理时,用此类作为增删改查的业务逻辑类即可。
keyFieldName是主键字段的类名,例如eas_b2cuser表的主键为obj_id,对应Easb2cuser类的objId字段,注意表和字段对应的类和类属性的命名规则,表字段下划线后的第一字母改为大写,去掉下划线,就是对应的类的属性名。
<param name="entityClassName">配置了此action对应的实体类名,现在我们要配置Easb2cuser的维护功能,自然此参数的值就是org.apache.easframework.core.entity.EasB2cuser;
codeColumns参数指定列表页面哪些字段需要显示代码对应的文字,例如列表页上要显示应用系统名称,而不是编码,所以此字段要配置为sysCode(sysCode是EasB2cuser类的一个属性),此参数可以逗号做间隔符配置多个字段。
sortColumns参数指定列表页面指定的排序顺序字段,例如userName asc,sysCode desc,指定排序规则后,页面打开时自动按此顺序排序,当然用户可通过点列标题来自己指定新的排序列(标题列中点一次按此列升序排列,再点一次按降序排列)。
下面是配置好的内容:
<action name="listEasB2cuser" class="org.apache.easframework.core.webwork.action.BaseAction">
<result name="input">/module/platform/editEasB2cuser.jsp</result>
<result name="success">/module/platform/listEasB2cuser.jsp</result>
<result name="select">/listEasB2cuser.action?operate=selectPageList</result>
<result name="edit">/module/platform/editEasB2cuser.jsp</result>
<result name="showList">/module/platform/listEasB2cuser.jsp</result>
<param name="serviceName">DBSupportService</param>
<param name="keyFieldName">objId</param>
<param name="entityClassName">org.apache.easframework.core.entity. EasB2cuser</param>
<param name="codeColumns">sysCode,userType</param>
<param name="sortColumns">sysCode asc,userName asc</param>
</action>
五、 在功能列表中添加一个连接:
打开module目录下的left_plat.jsp,随便找一个节点,添加对应的连接,,例如:
['B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护','<%=request.getContextPath()%>/listEasB2cuser.action?operate=selectPageList']
六、 列表页面:
可从已有的列表页面复制一个文件,例如在module\platform目录下复制listEasMetaColumn.jsp,更名为listEasB2cuser.jsp,将此页面的所有EasMetaColumn替换为EasB2cuser,此jsp中有(new String[]{"开发平台","基础数据管理","表字段信息维护"}),是生成功能导航文字的,可将文字部分改为"开发平台","权限管理","B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>帐号维护"(导航文字以后也可以定义为一个参数在xwork.xml中配置).
下面需要设置列表页需要显示的字段列表,将文件中:
<td nowrap class="result_head_dock" width="21%"><a href="javascript:customSort('tableName');">表名</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('columnName');">字段名</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('columnCnName');">字段中文名</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('classFieldName');">类属性名</a></td>
部分去掉,改为:
<td nowrap class="result_head_dock" width="9%">序号</td>
<td nowrap class="result_head_dock" width="21%"><a href="javascript:customSort('userId');">登录帐号</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('userName');">用户名称</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('userType');">用户类型</a></td>
<td nowrap class="result_head_dock" width="20%"><a href="javascript:customSort('sysCode');">所属系统</a></td>
其中userId,username,userType,sysCode是EasB2cuser类的属性。下面
<td align="center" width="21%"><ww:property value="tableName"/></td>
<td align="center" width="20%"><ww:property value="columnName"/></td>
<td align="center" width="20%"><ww:property value="columnCnName"/> </td>
<td align="center" width="20%"><ww:property value="classFieldName"/> </td>
替换为:
<td align="center" width="21%"><ww:property value="userId"/></td>
<td align="center" width="20%"><ww:property value="userName"/></td>
<td align="center" width="20%"><ww:property value="userType"/> </td>
<td align="center" width="20%"><ww:property value="sysCode"/> </td>
到这一步,点击功能连接中的B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护:
即可以看到一个没有数据的功能页面,由于现在eas_b2cuser表还没有数据,编辑页面还没有实现,我们可以直接在数据中插入两三条数据(注意row_id这个非主键列要唯一值),先看看这个列表页面的效果,大家可以看到,通过上述步骤,没有写java代码,但是排序、查询,翻页已经实现了(翻页需要多录入几条数据能看到效果)。大家点点列表标题连接,可以看到现在可以按照升序或降序来排列被点击的字段。不过目前我们看到两个问题:一是查询条件列的下拉列表为空,二是列表页的用户类型和所属系统两个字段为编码,应该显示名称,下面讲述如何在查询条件框中添加查询条件列和将编码(编码字段已在xwork.xml中定义了,为sysCode,userType)显示为名称。
首先我们为网站用户类型数据字典(WEBUSER_TYPE)和应用系统数据字典(SYSTEM_CODE)增加数据字典项:
网站用户类型数据字典增加USER,个人用户 COM单位用户
应用系统数据字典增加B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>电子商务BLOG博客HR人力资源网
以上数据字典和数据字典类型平台中已配置好。下面使用表字段基本信息维护功能增加eas_b2cuser表的几个字段的设置,增加内容(平台中已将这几个字段配置好,不用再配置了,这里为了说明操作步骤):
保存后再进入B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护中可看到查询条件下拉中已有了用户ID字段.
然后添加用户名称的配置
user_type字段配置(此字段值从数据字典取,在上文已配置好对应的数据字典编码):
sys_code配置:
这时候再回到B<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="C">2C</chmetcnv>用户帐号维护,查询条件下拉框中已有了查询条件列,选择用户名和登录帐号时,右侧显示输入框可输入查询文字,当选择网站用户类型,右侧显示网站用户的下拉数据字典项,选择所属系统时,右侧显示应用系统的下拉列表。这是切换查询列,并选择或输入查询内容,然后点查询按钮,我们会发现,查询功能已经实现了!仍然是-没有Coding!查询功能已经实现了!!!
列表页面还有什么变化?看用户类型和所属系统字段,原来是显示的编码,现在已经显示文字了,见下图:
(由于本文篇幅较长,编辑页面的实现在下篇文档中继续。)
分享到:
相关推荐
内容概要:本文档介绍了基于视觉匹配的工业装配智能识别系统的具体设计方案,旨在实现自动化、高精度接线检测。文中详细描述了系统的硬件构成、关键技术和处理流程,强调了从图像平滑到OCR文字提取等多个步骤的具体实施方式及其重要性,并阐述了系统对于提高工业生产质量评估效率的作用。此外,文档还探讨了所使用各类图像处理与深度学习方法的有效性和实际应用潜力,提供了较为完整的系统可行性分析。 适用人群:涉及图像处理技术研究的科研人员、从事工业自动化生产的管理人员和技术工作者。 使用场景及目标:适用于需要高精度识别接线正确性的各种工业生产线。其主要目标是在保证高效的同时尽可能减少人工介入,以确保检测的一致性和精确度,从而降低生产成本并提高产品合格率。 其他说明:系统涵盖了多项前沿科技,如机器视觉领域的图像平滑技术、边缘检测算法、图像匹配算法以及AI驱动的文字识别技术(OCR)。这些共同构成了完整的接线状态分析链路,可用于实时监控生产环节中接线情况。
基于阶梯碳交易成本的含电转气-碳捕集(P2G-CCS)耦合的综合能源系统低碳经济优化调度,采用(Matlab+Yalmip+Cplex) 考虑P2G设备、碳捕集电厂、风电机组、光伏机组、CHP机组、燃气锅炉、电储能、热储能、烟气存储罐。
python
从朋友那换来的,白色UI,二开的版本,不喜欢之前那个黑色UI的,可以看这个了,白色的看起来,精神了不少。 K线都正常的版本,运营级,接单、运营都没问题。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python
python
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
内容概要:该文章聚焦于无人机在复杂环境中实现自主导航与精确定位的技术难点,特别提出了一种基于扩展卡尔曼滤波器(EKF)进行三维同步定位与建图(SLAM)的方法,并结合线性二次型调节器(LQR)优化轨迹控制策略。具体内容涵盖系统的运动和观测模型建立、EKF的工作原理及其更新步骤、LQR的设计思路以及详细的MATLAB代码实现。文中不仅提供了完整的仿真环境设置,还在实验部分展示了定位精度提升、轨迹跟踪效果显著和地图构建的实际结果。 适用人群:研究人员、工程师以及对无人机动态系统感兴趣的学者和技术爱好者。 使用场景及目标:①解决无人机在复杂环境下精确导航和地图构建问题;②优化无人机沿预定路径飞行的能力,增强控制稳定性;③适用于学术研究和技术开发等领域。 其他说明:本文通过详尽的数学推导和代码实例,帮助读者理解EKF和LQR的应用背景、实施细节及其优势。此外,作者针对现有技术和未来研究趋势进行了讨论,指出了可能的发展方向。阅读时应注意实验条件对结论的影响,同时参考提供的完整MATLAB代码,有助于加深理解和实操能力。
python
python
《Matlab Simulink电力电子单项半波整流电路仿真》是基于Matlab/Simulink平台的电力电子单相半波整流电路仿真项目,旨在帮助用户通过仿真模型深入理解单相半波整流电路的工作原理、性能特点以及参数调节对电路行为的影响。该仿真模型用于模拟单相交流电源输入,通过半波整流方式将交流电转换为直流电,广泛应用于低功率的直流电源供电系统、低功率电池充电器等领域。 一、单项半波整流电路基本原理 单相半波整流电路是一种最简单的整流电路,它仅利用交流电源的半个周期来进行能量转换,通常采用二极管作为整流元件。半波整流器可以将交流信号的正半周期转换为直流电,但输出电压存在明显的波动,因此通常需要额外的滤波电路来平滑输出。 工作原理: 交流输入电源:输入的交流电压周期性变化,从零值增至最大值,然后反向变化,最终回到零值,完成一个周期。 整流元件(二极管):在正半周期,二极管导通,将交流电转化为直流电;在负半周期,二极管不导通,因此没有电流流通,输出电压为零。 输出直流电压:由于单相半波整流只利用了交流信号的正半周期,因此输出的直流电压在每个周期内会出现波动,表现为脉动直流。 电路组成:
基于matlab的二维小波相干分析,以空气质量数据为例。 进行二维小波相干分析。
MMC冷热冗余故障控制simulink仿真 0.295s SM1断路 0.3s SM1旁路开关闭合 0.5s SM2短路 0.505s SM2旁路开关闭合 0.7s 冷备用模块投入 0.995s SM3断路 1s SM3旁路开关闭合 1.2s SM4断路 1.205s SM4旁路开关闭合
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python
基于51单片机的电梯控制系统 操作说明: 1.图中绿灯为电梯上行指示灯、黄灯为下行指示灯、红灯为报警指示灯。 2.电梯初始状态位于一楼,在一楼的用户可直接按下电梯内部按钮,按后动电梯开始运行。 3.在任一层楼的用户,可以通过电梯外部的按钮请求电梯,电梯到达后通过内部按钮确定目标层。 注意:启动按钮相当于关门,电梯内部的请求都要按启动后电梯才会运行。
Muc知识图谱_第二次实验报告实验代码
python
这段代码是一个使用DDS(Data Distribution Service,数据分发服务)API的订阅者应用示例。DDS是一种中间件协议,用于在分布式系统中发布和订阅数据。该代码示例展示了如何创建一个订阅者,接收Grade类型的数据,计算三个成绩的平均值,并将结果以AverageGrade类型的数据发布出去。以下是对代码主要部分的解析和一些潜在问题的指出: 主要部分解析 创建参与者(Participant): 使用DomainParticipantFactory创建一个参与者,该参与者在指定的域ID中运行。 创建订阅者(Subscriber)和发布者(Publisher): 在参与者下分别创建订阅者和发布者。 注册数据类型: 注册Grade和AverageGrade数据类型,这是DDS通信的基础。 创建主题(Topic): 为Grade和AverageGrade数据类型分别创建主题。 创建数据读取器(DataReader)和数据写入器(DataWriter): 在订阅者下创建Grade数据读取器,在发布者下创建AverageGrade数据写入器。 数据接收与处理: 在UserDat