Java Web应用快速开发平台OpenJWeb(v1.6)增删改查页面生成器操作手册

Java Web应用快速开发平台

OpenJWeb(v1.6)代码生成器操作手册

联系人:王先生

手机:13651070328

QQ:29803446

Msn:baozhengw999@hotmail.com

Email:baozhengw@163.com

说明:因上传图片不方便,需要本文文档的请联系我或者从csdn中下载我上传的文件OpenJWeb_v1_6_代码生成器.PDF

Java Web应用快速开发平台.... 1

OpenJWeb(v1.6)代码生成器操作手册.... 1

第一章 概述.... 3

第二章自定义功能的具体过程.... 3

2.1 子系统说明... 3

2.2 通过平台建表.... 5

2.2.1 声明表结构... 5

2.2.2 定义表字段... 6

2.2.3 建表... 7

2.2.4 生成页面... 8

.3 代码生成器后续开发RoadMap. 13


第一章 概述

OpenJWeb V1.6采用的主框架为Struts2+Spring+Hibernate+Spring Security,后台管理页面可使用平台的代码生成器来生成。在平台中定义好一个数据库表结构后,可生成对应的数据库表,Java实体类代码,Hibernate配置文件,struts2action配置,编辑页面和列表页面、Struts2 Action类等,并在线调用ant进行编译。

第二章自定义功能的具体过程

2.1 子系统说明

子系统对应的数据库表为comm_sub_system,目前定义了以下子系统:

SYS_CODE

SYS_NAME

COMM

基础平台

CRM

客户关系管理

WF

流程控制

每个子系统都对应一个Struts2的命名空间,命名空间和子系统的对应关系见下表,其中命名空间的命名规则为子系统编码(SYS_CODE)的小写字母,见下表:

子系统编码

子系统名称

命名空间

对应strut2配置文件

COMM

基础平台

comm

struts-comm.xml

CRM

客户关系管理

crm

struts-crm.xml

WF

工作流

wf

struts-wf.xml

HR

人力资源

hr

struts-hr.xml

D:/project/openjweb/src/java /struts.xml的内容:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<include file="struts-default.xml"/>

<include file="struts-comm.xml"/>

<include file="struts-crm.xml"/>

<include file="struts-hr.xml"/>

<include file="struts-wf.xml"/>

</struts>

每增加一个子系统,都要在这里声明一个配置文件,并在同目录下创建一个对应的struts-开头的配置文件,例如struts-hr.xml,内容格式:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="hr" extends="struts-default" namespace="/hr">

<!-- insert new action -->

</package>

</struts>

请注意不要删除<!-- insert new action -->,因为平台生成action配置的时候自动寻找<!-- insert new action -->作为插入点。

2.2 通过平台建表

2.2.1 声明表结构

2-1 表结构定义

操作说明:

点“增加”按钮建一新记录,表结构命名统一为小写英文字母加下划线,表结构应以系统为前缀命名,实体类的packageorg.openjweb.core.entity(目前暂时使用固定的package,以后用户可指定其他package),实体类为类名规则:首字母大写,表名的下划线后的第一个字母大写,并去掉下划线,例如comm_user表对应的类名为CommUser,包含package的完整类名为org.openjweb.core.entity.CommUser

勾选一行记录,点建表可创建表结构,但目前表结构还没有定义,参考下一节表字段定义。

说明:目前建表语句采用的是Oracle的格式,暂未编写对其他关系数据库的建表语句。

2.2.2 定义表字段

2-2 表字段定义

2-3 页面属性

填写表字段注意事项:

(1) 类属性名的命名规则为字段名去掉下划线,并将下划线后的第一个字母改为大写,不要随意对类属性名命名,否则会出现问题。(以后类属性名改为由系统自动生成)

(2) 数据库属性中标签中,表名,表字段名,表字段中文名,类属性名,字段类型必须填写,字段长度也需要填写(目前系统提供了字符串和数字类型的,日期类的字段也是字符串类型),当字段为带小数字段时,小数位数也需要填写。

(3) 页面属性标签中定义了生成页面所需要的一些配置,页面输入方式中,弹出窗口、单选择按钮、复选框暂未实现。如果页面中显示文本框,则页面输入方式可空,系统认为文本框是默认的输入方式;如果页面输入为下拉选择,则应选择一个数据字典类型;列表页面显示和编辑页面显示分别表示生成页面时,是否在列表和编辑页面中显示这个字段。

(4) 此页面上有两个保存按钮,上面的保存按钮是保存整个列表的,下面是保存当前编辑列的。

(5) 以下字段不需要定义,平台会自动生成,包括:

列名

中文含义

类型

说明

pk_id

主键

Varchar2(20)

主键,每个表都有一个pk_id主键。

row_id

唯一行号

Varchar2(40)

非空,32UUID格式

sort_no

排序字段

NUMBER(16)

此字段存储排序顺序

create_dt

创建日期

VARCHAR2(23)

日期时分秒格式

create_uid

创建日期

VARCHAR2(23)

创建人

update_dt

最后修改日期

VARCHAR2(23)

日期时分秒

update_uid

最后修改人

VARCHAR2(23)

最后修改人

data_flg

数据状态

VARCHAR2(6)

0初始1正式2逻辑删除

flow_status

流程状态位

Varchar2(16)

用于工作流

flow_title

流程实例标题

Varchar2(100)

用于工作流显示待办任务使用

2.2.3 建表

参考2.2.1,当表字段定义完毕,勾选一个表,点“建表”按钮。如果操作成功,则会弹出操作成功的JS提示窗口,否则出现操作失败的JS提示窗口。建表过程系统生成了哪些内容?

(1) comm_column_def中增加2.2.2中列出的表字段的定义信息。

(2) 在数据库中创建了对应的数据库表。

(3) 生成了此表对应的Hibernate配置文件和POJO类。位于D:/project/openjweb/src/java/org/openjweb/core/entity目录。

(4) D:/project/openjweb/src/java/core-service-demo.xml中,增加了hibernate映射

文件的声明,见下文:

<property name="mappingResources">

<list>

<value>org/openjweb/core/entity/CommUser.hbm.xml</value>

<!--OpenJWebGenerator-->

</list>

</property>

说明:

(1) 请不要删除<!--OpenJWebGenerator-->标志,因为平台将<!--OpenJWebGenerator-->作为插入点标志。

(2) 如果重复建表操作,需要手工删除表。这是出于安全角度考虑,以免误删数据库表。

2.2.4 生成页面

目前平台可生成单表的增删改查页面。主明细页面的生成正在开发中。操作过程:

(1) 功能定义:

图2.4 功能定义列表页面

图2.5 功能定义编辑页面

URL地址:/namespace/list类名.action,例如表wf_mywork对应的URL:/wf/listWfMywork.action

实体类名:表的下拉,选择一个想要生成增删改查页面的表。

所属子系统:选择不同的子系统,则生成的jsp页面的存放位置不同,jsp生成的路径位于:

D:/project/openjweb/webapps/WEB-INF/jsp/命名空间/,例如工作流系统命名空间为wf,jsp路径为D:/project/openjweb/webapps/WEB-INF/jsp/wf/

Action路径:系统会根据actionpackage自动在指定的目录下创建action类。

DB Service Bean:指定一个SpringBean Service用于数据库访问,目前只配置了IDBSupportService3。所以必须填写IDBSupportService3

(2) 配置好上述内容后,在列表中点“生成代码”,系统会首先创建代码后,自动调用在线编译功能(系统会弹出提示窗口,最终编译成功后,系统自动装载新编译的类,此时连前面生成的建表时生成的实体类一起编译)。此步骤操作会生成以下内容:

l 列表和编辑JSP页面,如D:/project/openjweb/webapps/WEB-INF/jsp/wf/下的listWfMywork.jspeditWfMywork.jsp

l Action类,参考D:/project/openjweb/src/java/org/openjweb/core/action目录下的WfMyworkAction.java,内容如下(由平台生成的Action源代码):

package org.openjweb.core.action;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.apache.log4j.Logger;

import org.openjweb.core.entity.WfMywork;

import org.openjweb.core.action.PageAction;

import org.openjweb.core.entity.CommUser;

import org.openjweb.core.pageloader.PageLoaderImpl;

import org.openjweb.core.service.IDBSupportService;

import org.openjweb.core.service.ServiceLocator;

import org.openjweb.core.util.DropdownListBoxUtil;

import org.openjweb.core.util.StringUtil;

import org.springframework.dao.DataAccessException;

import org.springframework.security.context.SecurityContextHolder;

public class WfMyworkAction extends PageAction

{

private static final Logger logger = Logger.getLogger(WfMyworkAction.class);

private String nameSpaceActionName ="/wf/listWfMywork";//需要在子类中初始化

private String selId="";//当编辑一条记录时,选择的ID

private WfMywork editEntity = new WfMywork(); //待编辑的实体

private String register="";

public void setRegister(String value)

{

this.register = register;

}

public String getRegister()

{

return this.register;

}

public void setEditEntity(WfMywork entity)

{

this.editEntity = entity;

}

public WfMywork getEditEntity()

{

return this.editEntity;

}

public void setSelId(String id)

{

this.selId = id;

}

public String getSelId()

{

return this.selId;

}

public String getNameSpaceActionName()

{

return this.nameSpaceActionName;

}

protected void initAction()

{

this.setEntityClassName("org.openjweb.core.entity.WfMywork");

this.setDbService("IDBSupportService3");

//设置查询前内容

if(this.getPageLoader()==null||this.getPageLoader().getEntityClassName().trim().length()==0)

{

this.setPageLoader( new PageLoaderImpl(this.getDbService(),new Long(10),this.getEntityClassName()) );

//可在这里设置用户自定义的SQL,自定义的SQL可从页面中获取

}

PageLoaderImpl loader = this.getPageLoader();

loader.setIsShowName("true");

this.setPageLoader(loader);

}

public String edit() throws DataAccessException, Exception

{

this.initAction();

//获取selId,查询实体

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

String parmSelId = request.getParameter("selId");

this.selId = parmSelId;

logger.info("获得的编辑对象为:");

logger.info(this.selId);

map = DropdownListBoxUtil.getListMaps(this.getDbService(),this.getEntityClassName(), request);

request.setAttribute("map",map);

try

{

this.editEntity = (WfMywork)service.findById(this.getEntityClassName(), "rowId", this.getSelId());

}

catch(Exception ex) //如果没找到,说明已被删除,可进入新增模式

{

logger.error("没找到,进入新增模式");

}

return "edit";

}

public String save() throws Exception

{

this.initAction();

//获取selId,查询实体

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

String sUpdateDt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));

CommUser user = (CommUser) (SecurityContextHolder.getContext().getAuthentication().getPrincipal());

String uid="";

try

{

uid=user.getLoginId();

}

catch(Exception ex)

{

}

if(uid==null||uid.trim().length()==0)

{

return "reject";//权限不足或超时${test}

}

this.editEntity.setUpdateDt(sUpdateDt);

this.editEntity.setUpdateUid(uid);

if(this.editEntity.getPkId()==null||this.editEntity.getPkId().trim().length()==0)//新记录

{

this.getEditEntity().setPkId(String.valueOf(service.getSerial()));

this.editEntity.setCreateDt(sUpdateDt);

this.editEntity.setCreateUid(uid);

this.editEntity.setRowId(StringUtil.getUUID());

}

this.setSelId(this.getEditEntity().getRowId());//设置selId作为查询参数

service.saveOrUpdate(this.getEditEntity());

this.addActionMessage("保存成功!");

map = DropdownListBoxUtil.getListMaps(this.getDbService(),this.getEntityClassName(), request);

request.setAttribute("map",map);

return "edit";

}

}

(3) 编译后,访问:http://localhost:8088/crm/wf/listMywork.action,生成的列表页面和编辑页面:

图2.6 由平台生成的列页面

图2.7 由平台生成的编辑页面

在生成的编辑页面中,有文本输入框,日期选择器,下拉列表框等。下面是struts2带的日期选择器的外观(感觉明显不如webwork的日期选择器美观):

图2.8 由平台生成的编辑页面

到了这一步骤,可以体验一下,增加删除修改翻页功能都可以使用了,实现这一步不需要开发人员编写一行代码。

.3 代码生成器后续开发RoadMap

(1) struts2默认的编辑页面的风格不美观,需要设计新的主题模板。

(2) 生成的功能未与菜单树和权限绑定,需要自动分配到菜单树和自动创建页面按钮权限。

(3) 生成的页面标签文字有乱码,下一步需要增加多语资源文件生成。

(4) 生成校验xml,开发常用的校验器。

(5) 主明细表模板开发。

(6) 在功能定义中,应可由用户选择生成模板。

(7) 在功能定义中,可添加更多的功能按钮,并指定每个功能按钮的访问权限。

(8) 弹出选择窗口生成器需要实现。

(9)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值