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

 

 

Java Web应用快速开发平台

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

联系人:王先生

手机:13651070328

QQ:29803446

Msn:[email protected]

Email:[email protected]

 说明:因上传图片不方便,需要本文文档的请联系我或者从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)   

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java Web)