fastunit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/fastunit... · z...

97
FastUnit 开发手册 Version 2.5 北京易点迅联信息技术有限公司 www.fastunit.com

Upload: others

Post on 03-Jun-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

FastUnit 开发手册

Version 2.5

北京易点迅联信息技术有限公司

www.fastunit.com

Page 2: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

各章内容简介: 第 1 章 概述:平台简介 第 2 章 系统安装:如何安装 FastUnit 平台 第 3 章 平台架构:技术框架、开发模式等介绍 第 4 章 快速开始:以简单的案例入手,直接体验如何使用平台 第 5 章 组件开发:详细介绍如何开发各类组件 第 6 章 专题:综合功能或独立功能的讲解 第 7 章 API 简介:介绍常用类或接口 第 8 章 案例分析:结合案例深入了解平台运行机制 第 9 章 应用定制:介绍针对具体项目时,可能需要作出的调整 第 10 章 系统配置:配置文件详解 第 11 章 开发设置:开发环境和运行环境设置 第 12 章 附录:辅助功能及其他参考 相关文档: 关于用户管理等,参见《FastUnit 管理手册》 关于组件扩展,参见《FastUnit 组件开发手册》 参考示例: 登陆系统后可访问“演示中心”,有大量示例可供参考

Page 3: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

目录

1 概述................................................................................................................................ 1 1.1 主要特点............................................................................................................... 1 1.2 运行环境............................................................................................................... 1 1.3 技能要求............................................................................................................... 1

2 系统安装......................................................................................................................... 1 2.1 安装JDK............................................................................................................... 2 2.2 设置JAVA_HOME变量 ......................................................................................... 2 2.3 安装WEB服务器................................................................................................... 2 2.4 放置FastUnit文件 ................................................................................................. 3 2.5 部署到WEB服务器 ............................................................................................... 3 2.6 检验安装是否成功 ................................................................................................ 3

3 平台架构......................................................................................................................... 4 3.1 基本概念............................................................................................................... 4 3.2 系统组成............................................................................................................... 5 3.3 运行原理............................................................................................................... 5 3.4 文件结构............................................................................................................... 6 3.5 控制台 .................................................................................................................. 7 3.6 开发模式............................................................................................................... 8

4 快速开始......................................................................................................................... 8 4.1 使用向导实现客户管理模块 .................................................................................. 8 4.2 手动实现用户登陆模块 ....................................................................................... 10

5 组件开发....................................................................................................................... 13 5.1 概述.................................................................................................................... 13

5.1.1 组件简介 .................................................................................................. 13 5.1.2 组件关系 .................................................................................................. 13 5.1.3 组件编号规则 ........................................................................................... 13 5.1.4 各类组件的共有属性................................................................................. 14

5.2 表 ....................................................................................................................... 14 5.2.1 操作说明 .................................................................................................. 14 5.2.2 表属性 ...................................................................................................... 15 5.2.3 字段属性 .................................................................................................. 15

5.3 单元.................................................................................................................... 17 5.3.1 单元类型 .................................................................................................. 17 5.3.2 操作说明 .................................................................................................. 18 5.3.3 向导.......................................................................................................... 19 5.3.4 基本属性 .................................................................................................. 19 5.3.5 样式属性 .................................................................................................. 22 5.3.6 高级属性 .................................................................................................. 23 5.3.7 列表属性 .................................................................................................. 24 5.3.8 内容.......................................................................................................... 26 5.3.9 页面属性 .................................................................................................. 26

5.4 元素.................................................................................................................... 27 5.4.1 操作说明 .................................................................................................. 27 5.4.2 布局管理 .................................................................................................. 28 5.4.3 基本属性 .................................................................................................. 30 5.4.4 TD属性..................................................................................................... 33 5.4.5 验证属性 .................................................................................................. 33 5.4.6 元素类型 .................................................................................................. 34 5.4.7 预设元素 .................................................................................................. 42

i

Page 4: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.5 Action................................................................................................................. 43 5.5.1 Action属性................................................................................................ 43 5.5.2 ActionResult属性 ..................................................................................... 45 5.5.3 执行流程 .................................................................................................. 45 5.5.4 Action接口................................................................................................ 46

5.6 框架.................................................................................................................... 46 5.6.1 属性说明 .................................................................................................. 46

5.7 报表.................................................................................................................... 46 5.7.1 操作说明 .................................................................................................. 47 5.7.2 属性说明 .................................................................................................. 47 5.7.3 报表数据 .................................................................................................. 47

5.8 枚举.................................................................................................................... 48 5.8.1 操作说明 .................................................................................................. 49 5.8.2 枚举属性 .................................................................................................. 49 5.8.3 节点属性 .................................................................................................. 50

5.9 树 ....................................................................................................................... 50 5.9.1 表现方式 .................................................................................................. 50 5.9.2 操作说明 .................................................................................................. 51 5.9.3 树属性 ...................................................................................................... 51 5.9.4 节点属性 .................................................................................................. 53

5.10 统计图 .............................................................................................................. 54 5.10.1 统计图类型 ............................................................................................. 54 5.10.2 操作说明 ................................................................................................ 54 5.10.3 基本属性 ................................................................................................ 54 5.10.4 数据图区属性 ......................................................................................... 55 5.10.5 饼图属性 ................................................................................................ 55 5.10.6 权限控制 ................................................................................................ 56 5.10.7 案例........................................................................................................ 56

5.11 数据权限........................................................................................................... 56 5.11.1 使用说明 ................................................................................................ 56 5.11.2 节点属性 ................................................................................................ 57 5.11.3 案例........................................................................................................ 57

5.12 自增器 .............................................................................................................. 58 5.12.1 使用说明 ................................................................................................ 58 5.12.2 属性说明 ................................................................................................ 58 5.12.3 案例........................................................................................................ 59

6 专题.............................................................................................................................. 59 6.1 查询.................................................................................................................... 59

6.1.1 查询单元 .................................................................................................. 59 6.1.2 对列表单元的要求 .................................................................................... 60

6.2 用户权限............................................................................................................. 60 6.2.1 权限点 ...................................................................................................... 60 6.2.2 组织结构 .................................................................................................. 60

6.3 变量.................................................................................................................... 61 6.4 表达式 ................................................................................................................ 61

6.4.1 常量表达式 - $C{ }.................................................................................... 61 6.4.2 变量表达式 - $V{ } .................................................................................... 61 6.4.3 用户表达式 - $U{ }.................................................................................... 61 6.4.4 Request表达式 - $R{ }.............................................................................. 61 6.4.5 Session表达式 - $S{ } .............................................................................. 61 6.4.6 RequestSession表达式 - $RS{ } .............................................................. 62

ii

Page 5: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

6.4.7 标签表达式 - $L{ } .................................................................................... 62 6.4.8 数据表达式 - $D{ }.................................................................................... 62 6.4.9 SQL表达式 - $SQL[ ] / $SQL[[ ]] .............................................................. 62 6.4.10 简单案例 ................................................................................................ 63 6.4.11 表达式嵌套 ............................................................................................. 63

6.5 展现风格............................................................................................................. 63 6.5.1 样式文件 .................................................................................................. 63 6.5.2 模板.......................................................................................................... 67

6.6 数据库相关 ......................................................................................................... 69 6.6.1 日期格式 .................................................................................................. 69 6.6.2 WebLogic下使用Oracle的说明 ................................................................. 69

6.7 日历.................................................................................................................... 69 6.8 国际化 ................................................................................................................ 70 6.9 版本控制............................................................................................................. 70

6.9.1 版本导出 .................................................................................................. 70 6.9.2 版本导入 .................................................................................................. 71 6.9.3 版本查看 .................................................................................................. 71

7 API简介 ........................................................................................................................ 71 7.1 Java ................................................................................................................... 71

7.1.1 常用对象 .................................................................................................. 71 7.1.2 数据访问 .................................................................................................. 72 7.1.3 常用接口 .................................................................................................. 72 7.1.4 已实现的接口 ........................................................................................... 72

7.2 JavaScript .......................................................................................................... 72 7.2.1 fastunit.js.................................................................................................. 72 7.2.2 tree.js ....................................................................................................... 74

8 案例分析....................................................................................................................... 75 8.1 客户管理............................................................................................................. 75

8.1.1 进入表单页面的途径................................................................................. 75 8.1.2 显示模式的应用........................................................................................ 76 8.1.3 表单单元数据的获取................................................................................. 76 8.1.4 保存功能分析 ........................................................................................... 76 8.1.5 删除功能分析 ........................................................................................... 77

8.2 用户登录............................................................................................................. 77 8.2.1 应用模板 .................................................................................................. 77 8.2.2 应用元素显示模式 .................................................................................... 78

9 应用定制....................................................................................................................... 78 9.1 切换应用数据库.................................................................................................. 78 9.2 重新定义用户表.................................................................................................. 78 9.3 app域的说明....................................................................................................... 79

9.3.1 单元组“admin”.......................................................................................... 79 9.3.2 设置新增用户的初始密码 ......................................................................... 79 9.3.3 数据权限“user”说明................................................................................ 79 9.3.4 登录页面 .................................................................................................. 79 9.3.5 访问失败页面 ........................................................................................... 79

9.4 Web服务器URI编码设置 .................................................................................... 79 10 系统配置..................................................................................................................... 80

10.1 数据源配置 ....................................................................................................... 80 10.1.1 配置详解 ................................................................................................ 80 10.1.2 Tomcat连接池配置 ................................................................................. 81

10.2 全局配置........................................................................................................... 82

iii

Page 6: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

10.3 域配置 .............................................................................................................. 83 10.3.1 domain.xml ............................................................................................ 83 10.3.2 interceptors.xml ..................................................................................... 83

11 开发设置..................................................................................................................... 84 11.1 系统信息........................................................................................................... 84 11.2 应用设置........................................................................................................... 84 11.3 组件设置........................................................................................................... 84 11.4 向导设置........................................................................................................... 84 11.5 创建域 .............................................................................................................. 85

12 附录............................................................................................................................ 85 12.1 协同开发........................................................................................................... 85

12.1.1 集中开发 ................................................................................................ 85 12.1.2 分布式开发 ............................................................................................. 85

12.2 调试工具........................................................................................................... 85 12.2.1 跟踪器 .................................................................................................... 86 12.2.2 计时器 .................................................................................................... 86

12.3 开发规范........................................................................................................... 87 12.4 关于资源中心 ................................................................................................... 87 12.5 Linux下使用报表和统计图的注意事项 .............................................................. 87

12.5.1 显示问题的解决...................................................................................... 87 12.5.2 中文问题的解决...................................................................................... 87

12.6 iReport简介 ...................................................................................................... 87 12.6.1 安装........................................................................................................ 88 12.6.2 基本设置 ................................................................................................ 88 12.6.3 数据源设置 ............................................................................................. 88 12.6.4 PDF报表的中文处理............................................................................... 88 12.6.5 使用Report Wizard创建报表 .................................................................. 89 12.6.6 编译和预览 ............................................................................................. 91

iv

Page 7: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

1 概述 FastUnit是基于Java的快速开发平台,开发时几乎不需编码,以可插拔组件为核心实现软

件自动化,在可视化环境中创建可观察、可管理的企业级应用。 平台集成了运行框架、组件库、开发环境和辅助工具,实现了用户管理、权限管理、系统

监控等通用子系统,开发中可以摆脱大部分技术问题的困扰,集中精力解决客户需求。

1.1 主要特点

简单快速 组件化:提供大量直接使用的组件,复杂技术封装,可视化配置; 无代码:大部分工作以无代码方式完成,无需专业技术基础; 向导:快速创建完整模块,直接投入使用; 模块移植:避免重复开发。

功能强大

稳定:底层框架实现了 MVC 和 AOP 模式,技术成熟; 高效:具有缓存、代码精简、单次数据连接、预存取、查询优化等特性; 安全:实现了访问控制、数据权限、域锁定、令牌校验等安全手段; 可扩展:IOC 模式实现组件注册机制,通过扩展组件使平台不断强大; 大型应用支持:海量数据优化处理、国际化、集群等;

规范化

所有组件标准一致,统一管理; 可持续积累:通用模块可不断加入资源库,在另一个项目中直接使用。

参与应用开发的全过程

需求阶段:迅速搭建原型系统,供开发人员和客户进行分析评估; 开发阶段:可视化环境,同时提供版本控制、协同开发、数据迁移等辅助工具; 测试阶段:跟踪器用于监控各线程资源消耗,使系统瓶颈一目了然; 维护阶段:发布管理、在线更新。

1.2 运行环境

JDK1.4 及以上; 操作系统:Unix/Linux、Windows、AS400; 数据库:Oracle、DB2、SQL Server、Sybase、MySQL、PostgreSQL、Informix; 应用服务器:WebLogic、WebSphere、JBoss、Tomcat、Resin、Apusic 等;

1.3 技能要求

了解 Java 编程基本概念:面向对象、接口、继承等; 了解关系数据库的 SQL 语法。

2 系统安装 本章未涉及应用数据库,使用了系统自带的 HSQLDB 数据库,在正式开发之前,请参照

第 9 章“应用定制”针对具体项目做相应调整。

1

Page 8: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

2.1 安装 JDK

需要安装 JDK1.4 或以上版本。如果已安装,则跳过此节。 JDK安装包可在官方网站http://java.sun.com下载,按默认安装即可。

2.2 设置 JAVA_HOME 变量

对于 Windows,由“我的电脑”->右键“属性”->“高级”->“环境变量”,进入设置:

2、填写 JDK 的安装路径

1、单击“新建”

2.3 安装 WEB 服务器

Tomcat 安装方法: 1. 在官方网站http://tomcat.apache.org下载zip版本:

下载“zip”版本

2

Page 9: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

2. 下载的 zip 文件解压即可 启动 tomcat 的方法:双击/tomcat/bin/startup.bat。

2.4 放置 FastUnit 文件

1. 解压产品包 fastunit 和 fastunithome 目录放置在任意位置,如果都放置在 D 盘根路径下,则步骤 2、3可跳过。 2. 设置 home 路径 修改如下文件: /fastunit/WEB-INF/src/init.xml /fastunit/WEB-INF/classes/init.xml 修改<home>节点的路径,指向 fastunithome 目录。 3. 设置日志输出路径 修改如下文件: /fastunit/WEB-INF/src/log4j.properties /fastunit/WEB-INF/classes/log4j.properties 修改属性“log4j.appender.stdout.File”,指向/fastunithome/log/out.log 路径。

2.5 部署到 WEB 服务器

以 Tomcat 为例,创建一个 xml 文件,内容如下: <Context path="" docBase="d:/fastunit" privileged="true" reloadable="true"> </Context> 对于 Tomcat4,文件名任意指定,放置在 Tomcat/webapps/下;对于 Tomcat5 和

Tomcat6,命名为 ROOT.xml(ROOT 大写),放置在 Tomcat/conf/Catalina/localhost/下。 注意,必须部署为根路径方式: 对于 Tomcat,在上述 xml 文件中,Context 节点的 path 属性要设为空; 对于 WebLogic,可以通过 WebLogic Builder 工具将“Context Root”设为“/”。

2.6 检验安装是否成功

启动WEB服务器后,以URL“http://localhost:8080/app/login.do”访问登录页面,出现如

下登录页面则表明安装成功,以默认用户名“admin”和密码“admin”登录,进入开发平

台。

3

Page 10: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

3 平台架构

3.1 基本概念

元素(Element)和单元(Unit) 元素是视图展现的 小单位,可以是一个文本域或一个统计图等;单元是一组元素的集

合,构成完整页面或页面的一个区域,单元可以嵌套。

Unit Element

抽象

Action

Action 负责执行业务逻辑。以表组件为基础,可以直接通过命令行语法实现数据库表的增

加、修改和删除,无需编写程序。

MVC 在 FastUnit 框架中,单元是视图的唯一实现方式,单元将数据与展现形式完全分离;

Action 负责执行业务逻辑;开发中不必关系控制器,系统会自动实现调度。

域(domain) 域相当于一个子系统,各类组件在域中创建,不同域之间的组件不能直接引用。

4

Page 11: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

拦截器(Interceptor)

拦截器是实现 AOP 模式的重要手段,用于处理切面问题或动态逻辑。例如,系统的权限

控制即使用拦截器实现的。

3.2 系统组成

框架层:底层支撑环境,协调各组件共同工作,统一资源调度; 组件层:以 Unit 组件为核心,将复杂技术封装,解决复用性,可持续积累; 开发控制台:提供可视化开发环境,使开发变得简单、迅速、规范化,同时提供了版

本控制、跟踪器等辅助工具; 管理控制台:实现了应用中必备的子系统:用户管理、权限管理、系统监控等。

3.3 运行原理

视图 单元实现了视图,在运行时刻,单元及所属元素将依据在控制台中设置的参数,将组件对

象转换为 HTML 代码,并通过 Sevelet 输出到客户端。 访问单元的 URL 为:“/域/单元编号.do”,例如域“app”下的单元“test”,访问 URL为“/app/test.do”。

Action Action,即启用了 Action 的元素,在运行时刻,调用所设置的 Action 类,执行此类的

execute 方法。 访问 Action 的 URL 为:“/域/单元编号/元素编号.do”,例如域“app”下单元“test”的

Action 元素“save”,访问 URL 为“/app/test/save.do”。

拦截器

5

Page 12: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

拦截器在视图或 Action 执行前、后进行拦截,用来执行动态逻辑:

AI:ActionInterceptor,Action 拦截器 UI:UnitInterceptor,单元拦截器 PI:PageInterceptor,页面拦截器

3.4 文件结构

应用路径(fastunit 目录) 路径 说明 /common/ 公用资源,如 css、js、图片文件等 /common/datepicker/ 日历控件 /common/fckeditor/ FCKEditor 编辑器 /common/files/ FCKEditor 编辑器的文件上传和引用路径 /common/images/ 图片资源 /common/skins/ 皮肤(样式文件)路径 /common/tree/ 树 /domain/ 各个域中组件专用的资源文件 /domain/app/ app 域中组件专用的资源文件 /WEB-INF/lib/ 平台运行所需的 jar 文件 /WEB-INF/src/ 包含了 app 域和 demo 域的源码

Home 路径(fastunithome 目录): 路径 说明 /database/ HSQLDB 数据库 /database/app/ 默认的应用数据库,对应的域为 app /database/demo/ 演示系统使用的数据库,对应的域为 demo /database/lib/ 资源中心使用的数据库,对应的域为 lib /database/system/ 系统使用的数据库 /database/test/ 测试数据库,对应的域为 test /datasource/ 数据源配置文件 /domain/ 域数据库及域配置文件 /i18n/ 国际化资源文件 /log/ Log4j 日志文件输出路径 /setup/ 应用定制所需的脚本文件 /template/ 模板路径

6

Page 13: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

/version/ 版本文件路径

3.5 控制台

系统登录后,进入如下界面:

切换视图

视图说明:

组件管理:开发人员的工作场所,管理各类组件; 开发设置:开发环境和运行环境设置; 资源中心:用于组件积累,对应了“lib”域; 演示中心:功能展示、参考示例,可在“demo”域查看相应的组件设置; 测试中心:用于测试,对应了“test”域。

组件管理:

组件管理区

组件树

7

Page 14: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

域说明:

app:应用系统,需要改动原有组件时,请参照第 9 章“应用定制”的说明; lib:资源中心; demo:演示中心; test:测试域,用于练习和测试,可以随意做任何操作。

3.6 开发模式

在开发控制台中管理组件 以单元和 Action 为核心开发各类组件,可视化环境下的开发工作无需编码,占据 90%以上

的工作量。

需要程序处理动态逻辑时,只需面对 4 个接口: 处理业务 Action 执行业务逻辑 ActionInterceptor(不常用) 对 Aciton 拦截 控制视图 UnitInterceptor 动态设置 Unit 对象及所属 Element 对象 PageInterceptor(不常用) 动态设置 Page 对象

完整模块的开发流程通常为: 顺序 步骤 内容

1 需求确认 2 创建表 从数据库导入表或手动创建,设定表的行为规则。 3 创建单元 使用向导或手动创建,调整页面布局、样式风格、验证逻

辑等。 4 完成单元中的 Action 通过 Action 命令行设定业务逻辑或自行指定 Action 类、

设定流转控制等。 5 挂接菜单 菜单树上添加此模块的入口链接。 6 权限点设置 单元显示模式、Action、数据权限、元素权限。 7 测试 8 发布单元并锁定

4 快速开始 本章将实现两个简单案例,来直接体验使用 FastUnit 开发的基本过程,对实现原理不作过

多解释,第 8 章“案例分析”中将对这两个案例做详细分析。 下面我们进入开发控制台,选择在“test”域中创建这两个案例。

4.1 使用向导实现客户管理模块

需求设定:客户表维护,具有增、删、改、查、分页、表单验证等完整功能。

进入表管理界面:

8

Page 15: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

1. 选择 test 域

2. 在“表”的右键菜

单中选择“新增表”

创建“客户表”组件:

2. 在数据库中创建表

1. 表和字段属性设置完毕后保存

注:“创建表”按钮在保存之后才会出现,在下一步完成数据库创建后消失。

在数据库中创建表:

点击创建

进入向导界面:

在“单元”的右键菜

单中选择“向导”

使用向导创建各单元:

1. 点击“生成编号”2. 填写名称 3. 创建

至此,开发完成。

检验开发结果:

9

Page 16: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

单元“customer”是此模块的入口页面,点击此单元,在单元管理界面上点击“预览”卡

片,此时可以测试增、删、改、查各项功能:

注:访问此页面的 URL 为“http://localhost:8080/test/customer.do”。

4.2 手动实现用户登陆模块

在组件树上选择新增表单:

设置单元的“基本”卡片:

1. 填写“单元编号”和“标题”

2. 设为“可访问”

设置单元的“样式”卡片:

含义:第一列右对齐,宽度 30%;

第二列左对齐,宽度 70%

10

Page 17: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

点击“元素”卡片进入元素管理界面:

1. 列数设为 2

3. 创建一个“文本域”元素 e1

2. 右键菜单 5. 创建一个“按钮”元素 e3

4. 创建一个“密码”元素 e2

鼠标左键点击元素图标“e1”,设置元素编号和名称:

鼠标左键点击元素图标“e2”,设置元素编号和名称:

鼠标左键点击元素图标“e3”,设置 “基本”卡片和“TD”卡片;

设为“中”

鼠标右键点击元素图标“login”,在右键菜单中点击“自动标签”取消自动标签、再

通过右键菜单点击“Action”将其设为 Action 元素:

设为“Action”后,出现“蓝色 A”标志

设置元素“login”的“Action”卡片和“ActionResult”卡片:

11

Page 18: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

点击“保存”按钮,保存单元组件;

编写 LoginAction 类: 可以使用 Eclipse 等工具编写 Java 代码,LoginAction.java 文件应位于\fastunit\WEB-INF\src\test\下,代码如下: package test; import com.fastunit.context.ActionContext; import com.fastunit.support.Action; public class LoginAction implements Action { public ActionContext execute(ActionContext ac) throws Exception { String userId = ac.getRequestParameter("login.userid"); String password = ac.getRequestParameter("login.password"); // 此处设置的登录成功的条件:用户名和密码都为"test"。实际应用中应当查询数据

库,并在登录成功后将用户对象存入 Session if (!("test".equals(userId) && "test".equals(password))) { // 设置 Action 失败

ac.getActionResult().setSuccessful(false); } return ac; } } 至此,开发完成。

在组件树上点击单元“login”,在“预览”中测试:

注:访问此页面的 URL 为“http://localhost:8080/test/login.do?m=e”。

12

Page 19: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5 组件开发

5.1 概述

5.1.1 组件简介

表 对应为数据库的表,为 Action 和单元提供操作依据。 元素 视图的 小展现单位。 单元 元素的集合,构成完整的页面或页面的一个区域。 Action 执行业务逻辑。 枚举 为单选、下列等元素提供数据选项。 数据权限 为单元和枚举提供数据权限控制。 统计图 数据图形。 树 树状结构数据的展现。 自增器 自动生成唯一字符串,供表的字段使用。 各类组件一般只需设置编号以及少数必要的属性即可满足需要,大部分属性用于特殊控

制,不使用时保持原始值。

5.1.2 组件关系

单元用来实现视图,Action 用来执行业务逻辑,其他组件都是为两者服务的。

自增器

统计图

枚举 树

数据权限 元素

单元

Action

5.1.3 组件编号规则

为形成统一规范,降低因大小写带来的问题,系统会强制将表名转换为大写,其他编号一

律使用小写。

13

Page 20: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.1.4 各类组件的共有属性

属性 说明 组 仅用来对组件分类。 锁定 锁定后的组件,仅锁定人或项目经理组成员可以修改该组件,包括解除

锁定。锁定的组件不支持删除操作。一个已完成并通过测试的组件应当

由项目经理或其他管理人员设为锁定,防止组件发生变动。 排序 仅用来决定在组件树上的显示位置。 开发日志 包含“创建人”、“创建时间”、“修改人”、“修改时间”、“备忘

录”。“备忘录”可用于记录开发要点、注意事项、更新计划等。

5.2 表

业务当中涉及的数据库表都应当创建一个表组件,表组件定义了数据库特性及部分业务逻

辑。表在下面的场合中被使用: 被向导使用:向导通过表的配置,生成相关的一系列单元; 被单元使用:单元通过“映射表”来执行相关视图逻辑; 被 Action 使用:依赖表的配置执行命令行操作;

5.2.1 操作说明

5.2.1.1 右键菜单

从数据库导入

新增组

新增表

删除表

复制一份相同的表

列出映射此表的单元

5.2.1.2 表管理

注:“创建表”按钮出现的条件:数据库中不存在此表并且主键已设。

在数据库中创建表

删除字段 新增字段必填主键

5.2.1.3 从数据库导入表

可空,使用默认数据源数据库中存在的表名

14

Page 21: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.2.1.4 在数据库创建表

在表管理界面点击“创建表”,进入如下视图,点击“创建”执行建表脚本。

注:字段设为无效时不参与创建。

5.2.2 表属性

5.2.2.1 表名

与数据库中的表名一致。 表名变化时,需要手动修改相关 Action 元素“命令行”的引用。

5.2.2.2 版本字段

版本字段用来防止脏读、重复写。设置了版本字段的表在执行修改和删除操作时,会依据

版本字段的值是否发生变化来判断此条数据是否被他人修改。当已被他人修改时,当前的

修改或删除操作不会被执行。 例如,甲将某条数据取出时,版本字段的值为“a”,然后乙修改了该条数据,版本字段

的值变为“b”,接下来甲保存数据时,系统会提示由于版本字段的变化导致保存失败。

对版本字段的要求:每次数据的修改都会使版本字段的值发生变化,并且不会重复。

一般使用带有时间戳或自增器的值生成器的字段。 对映射此表的单元的要求:可以不包含版本字段元素,但单元数据(MapList)中要包

含版本字段的值(对于“SQL”数据模式而言,查询结果集中要包含版本字段)。

5.2.3 字段属性

5.2.3.1 数据类型

不同数据库的数据类型稍有差异,系统会自动映射不同数据库的类型并处理差异性,数据

类型的对应关系如下: 表一: Oracle DB2 SQL Server 定长字符 CHAR CHAR CHAR 变长字符 VARCHAR2 VARCHAR VARCHAR 小整数 NUMBER(5) SMALLINT SMALLINT 整数 NUMBER(10) INTEGER INT 大整数 NUMBER(19) BIGINT NUMERIC(19) 单精度 FLOAT FLOAT FLOAT 双精度 DOUBLE DOUBLE DOUBLE 小数 NUMBER DECIMAL NUMERIC 日期 DATE DATE DATETIME 时间 DATE TIME DATETIME

需要修正时可直接修改脚本

15

Page 22: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

时间戳 DATE TIMESTAMP DATETIME CLOB CLOB CLOB TEXT BLOB BLOB BLOB IMAGE 表二: MySQL PostgreSQL Sybase 定长字符 CHAR CHAR CHAR 变长字符 VARCHAR VARCHAR VARCHAR 小整数 SMALLINT SMALLINT SMALLINT 整数 INTEGER INT INT 大整数 BIGINT BIGINT NUMERIC(19) 单精度 FLOAT REAL/FLOAT4 FLOAT 双精度 DOUBLE DOUBLE DOUBLE 小数 NUMERIC NUMERIC NUMERIC 日期 DATE DATE DATETIME 时间 TIME TIME DATETIME 时间戳 DATETIME TIMESTAMP DATETIME CLOB LONGTEXT TEXT TEXT BLOB LONGBLOB BYTEA IMAGE 注:对于日期类型,某些数据库不明确区分日期、时间或时间戳,平台会自动依据指定的

类型来存储和显示相应的格式。

5.2.3.2 主键

表必须设置主键,否则不能通过向导来创建单元,也不能通过 Action 命令行来操作此表。

5.2.3.3 必填、长度、精度

仅在创建数据库表时使用。表单验证时不会检查此处的设置,而是依据元素的验证属性。

5.2.3.4 值生成器、生成规则

值生成器 为字段自动生成值,设置了值生成器的字段不会接受表单提交的数据,因此单元中没有该

字段的元素时,字段的值也仍然会按规则生成。

生成规则 新增:仅在执行 insert 时使用值生成器; 修改:仅在执行 update 时使用值生成器; 全部:在执行 insert 或 update 时都使用值生成器;

系统提供的值生成器

值生成器 生成的值 数据库 数据库自动设值,如自增字段。设为此项时,无论新增还是修改,

FastUnit 都不会设置该字段的值,由数据库处理。此选项不受“生成规

则”约束。 日期 当前日期 时间 当前时间 时间戳 当前日期时间 用户 ID 执行操作的用户的编号

16

Page 23: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

案例 表 T 的字段 c 设置了“时间戳”类型的值生成器,生成规则为“新增”:当表 T 新增了一

条数据时,字段 c 的值被设为当前日期时间,修改此条数据时,字段 c 的值不发生变化。

自增器 自增器是值生成器的来源之一,会自动加入到值生成器的下拉列表中。

注意事项 作为父表,通过向导生成父子表应用时,父表的主键不能设置值生成器,否则无

法与子表同步; 对于 TIMESTAMP 字段类型,某些数据库会自动设置值(如 MySQL),此时不

必设为时间戳类型的值生成器。

5.2.3.5 有效

无效的字段不会参与数据库操作。一般用来标识未决字段。

5.2.3.6 显示顺序

在使用向导生成的单元时,字段的显示顺序决定了元素的位置,因此在使用向导之前应调

整好字段顺序,可以减少调整元素布局的工作量。

5.3 单元

单元是一组元素的集合,通常从视图布局角度将同一区域的元素划分为一个单元。

“可访问”的单元可以使用 URL“/domain/unitid.do”来访问。 单元可以通过“单元元素”成为其他单元的子单元。

5.3.1 单元类型

包含元素的单元: 表单:用来显示单条数据或非数据元素,是 常用的单元类型。 列表:用来显示多行数据。 查询:为列表单元提供查询功能。

不包含元素的单元:

框架:帧结构的页面。 报表:利用开源报表 JasperReport 来产生报表。

图标说明:

可访问 未发布

包含权限点锁定

17

Page 24: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

包含权限点时,可能的权限点来源为:“需要授权”、“数据权限”不为空、所属元素

“需要授权”。

5.3.2 操作说明

5.3.2.1 右键菜单

新增各类单元

元素查询

单元查询

使用向导创建单元

新增组

删除单元

复制一份相同的单元

列出引用此单元的单元

5.3.2.2 单元管理

转入元素管理 查看单元效果

从其他单元或本

单元复制元素

数据相关属性

淡蓝色背景:可使用表达

式,鼠标移上时有提示

5.3.2.3 预览

以 “修改”模式来显示该页面或单元,由于在非正式环境下运行,可能会与实际结果有出

入,例如,此单元需要提供其他 request 参数才能正常运转。 对不可访问的单元,预览效果可能和实际效果不完全一样,以下原因可能引起误差:

使用的是 dev 的域设置(domain.xml) 没有引入其所属页面的 js 和 css 资源

此时应以所属页面的 url 访问来看实际的效果。

5.3.2.4 引入元素

用于从其他单元或本单元复制元素。

18

Page 25: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

选择从哪个单元引入元素

选择元素可以重新命名元素编号

5.3.2.5 单元查询

所有文本域均为模糊查询 显示列:在列表中显示指定的列

5.3.2.6 元素查询

所有文本域均为模糊查询 显示列:在列表中显示指定的列

5.3.3 向导

向导可以依据表生成各种不同类型的应用,实现瞬间创建完整模块,生成后直接使用。

操作图解:

1. 选择类型 3. 自动生成编号2. 选择表 5. 创建

4. 填写名称

生成编号:可以不使用,手动设置编号; 加入单元组:如果选中,提交后创建单元组(如果已存在则不创建),并将本次

生成的所有单元加入此单元组,未选中时所有单元放置于单元根路径下。

验证规则 选择的表不能没有设置主键; 选中“加入单元组”时,单元组编号不允许为空(允许是已存在的单元组); 所有单元编号不能为空和重复,并且不能是已存在的单元编号; 对于父子表,父表和子表不能相同,链接字段不能为空并且存在于相应的表中。

其他说明

向导配置见《FastUnit 管理手册》 向导组件类型可以自行添加,详见《FastUnit 组件开发手册》 修改/domain/dev/wizard.js 可以改变自动生成的单元编号后缀

5.3.4 基本属性

5.3.4.1 单元编号

单元编号是单元的唯一标志。 单元编号确定后不要轻易变动,变动后需要手动修改相关的引用:

19

Page 26: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

树节点的链接、目标单元; Action 元素的验证单元、命令行、转向 URL; 程序中引用的单元编号。

5.3.4.2 标题

标题后的“显示”选项用于控制是否显示单元标题。

5.3.4.3 映射表

以下情形必须设置映射表: 此单元在Action的“命令行”以主单元角色参与表的操作; 列表单元设置了“查询单元”属性; 报表单元设置了“查询单元”属性;

5.3.4.4 数据模式、数据表达式

数据模式和数据表达式用来设置单元数据。单元数据对应为 MapList 类对象,应当包含所

属元素的值,运行期间元素的配置与数据相结合产生 终表现形态。 数据模式 说明 数据表达式 SQL 使用 sql 语句获取数据 sql 语句 MapListFactory 使用 MapListFactory 设置数据 实现接口 MapListFactory 的类路径 静态值 静态数据,常用于测试 格式:元素 1 编号=元素 1 值,元素 2

编号,元素 2 值…;…(以“;”分隔一

行数据) 注:单元数据也可以在拦截器中通过 Unit.setData()来动态设置。

DB2 数据库注意事项: 系统在处理列表单元的分页查询时, 分别使用了各种数据库的专有语法对原始 SQL 改造

以提高效率。对于 DB2 的分页语法,原始 SQL 中不能直接使用“*”作为结果集,如: select * from T 此时,改成如下语法之一即可: select t1.* from T t1 select T.* from T

5.3.4.5 数据源

数据模式为“SQL”时所要使用的数据源,数据源文件位于{home}/datasource/中,设置

时不包含“.xml”后缀。默认使用域配置文件设置的数据源。

5.3.4.6 数据权限

数据模式为“SQL”时,可以设置数据权限,此时要求 SQL 语句中包含“${DP}”字符

串,“${DP}”在运行期间会被替换为当前用户所具有的条件语句。 参见“数据权限”的说明。

5.3.4.7 可访问

决定此单元是否可以通过 URL“/domain/unitid.do”来访问。不可访问的单元只能以其他

单元的子单元形式出现。

20

Page 27: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.3.4.8 发布

未发布的单元(包括可访问的和不可访问的)及所属 Action,只有开发组或项目经理组成

员可以访问。处于调试中的单元应设为未发布,开发完成后设为发布。 对于普通用户,访问未发布单元时将被提示“页面不存在”,已发布单元中包含未发布单

元时,单元的位置被字符串“unpublished unit: unitid!”替代。

5.3.4.9 显示模式

单元的显示模式决定了所属元素的显示模式: 单元显示模式 元素显示模式 s(查看) 使用“有权模式”的“查看”设置(默认为文本) e(修改) 使用“有权模式”的“修改”设置(默认为控件) a(新增) 使用“有权模式”的“新增”设置(默认为控件) 单元需要授权时,单元显示模式作为不同的权限点分别控制。

不同单元类型具有的显示模式选项: 单元显示模式 表单 列表 查询

s(查看) e(修改) a(新增)

设置单元显示模式的方式:

指定 URL 参数:“m” 参数用于设置全局显示模式,“unitid.m” 参数用于设置

指定单元的显示模式,注意参数值 s、e、a 为小写,参数值不合法时将被忽略。 程序设置:拦截器中通过 Unit.setShowMode()设置,此方式优先级 高;

决定单元显示模式的流程:

检查Unit对象

使用显示模式

存入Session

已设置?

存在?

存在?

存在?

否使用“查看”显示模式

检查Session参数

检查Request中全局参数

检查Request中本单元的参数

举例说明: 假设的场景:“b”、“c”是可访问单元“a”的子单元,这 3 个单元属于域“app” 访问顺序 URL a 的显示模式 b 的显示模式 c 的显示模式 1 /app/a.do s s s 2 /app/a.do?m=e&b.m=a e (m=e) a (b.m=a) e (m=e)

21

Page 28: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

3 /app/a.do e (Session) a (Session) e (Session)

5.3.4.10 需要授权、授权说明

需要授权 启用后,单元显示模式将成为权限点。 不可访问的单元由于不能以 URL 访问,一般不需设为“需要授权”,可减少授权工作量。

授权说明 在角色授权页面,鼠标移至此单元节点时显示此说明,可供授权人员参考。

5.3.5 样式属性

5.3.5.1 高度/宽度

控制单元的整体高度或宽度,宽度默认为 100%。

5.3.5.2 边框

表格区边框

操作区边框

单元边框

TD 边框

5.3.5.3 列配置

列配置是通过使用 HTML 的<COLGROUP>来控制列的整体样式,可以避免设置列中每个

<TD>的样式,此方法可以有效降低 HTML 代码量。

语法: CSS,宽度,列数;CSS,宽度,列数;…

CSS:样式名称; 宽度:可以是相对宽度或绝对宽度,如“20%”或“200px”; 列数:此 CSS 样式和宽度影响的列数。

其中,“样式名称”或“宽度”允许为空,但不能省略“,”分隔标志。

举例说明: css 文件的内容: .a{text-align:right;color:red;} .b{text-align:center;} 对于一个 6 列的单元,列配置定义如下 a, ,1;b,20%,3; 控制结果: 第 1 列:使用样式 a(字体颜色为红色,居右对齐),不控制宽度; 第 2、3、4 列:使用样式 b(居中对齐),宽度各为 20%;

22

Page 29: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

第 5 列、第 6 列:未定义,将和第一列共享 40%的宽度。

5.3.6 高级属性

5.3.6.1 记忆

启用了记忆的单元,在表单提交后数据会存入会话(Session),下一次进入此页面时数

据自动还原。

典型应用场景:需要连续填写多个表单、允许随时返回前面的表单重新修改。 启用“记忆”会占用系统资源,应避免大量使用。

5.3.6.2 支持 JS 新增

当列表单元或表单单元需要使用 JavaScript 方法添加数据时(如开发控制台中表管理的添

加字段功能),应启用此设置。

相应的 JavaScript 方法: 添加:对于列表单元 doListAdd(unitid),对于表单单元 doFormAdd(unitid); 移除:doRemove(unitid)

通过预设组件的“添加”和 “移除”按钮,系统可以自动设置触发按钮。添加和移除方法

只是客户端行为,需要执行 Action 保存后才会更新至数据库。

包含子单元或文本区域元素的单元不支持此功能; 此功能会额外增加一部分 HTML 代码,因此不需要时应关闭此设置。

5.3.6.3 隐藏/显示

启用后,通过点击单元标题前的图标可“隐藏”或“显示”单元的非标题区域:

5.3.6.4 UI

单元拦截器,实现 UnitInterceptor 接口,设置多个时以“,”分隔。 单元在转换为 HTML 代码前,会将 Unit 对象传入 UI 的 intercept 方法,通过 Unit 对象可以

控制单元及其所有元素的展现规则或数据,使用 UI 是动态控制视图的常用方法。

5.3.6.5 单元模板

为单元定制模板文件,是一个相对路径,相对于{Home}/ template/。 默认的单元模板为 unit.html,定制模板时,可在此模板基础上进行修改。 参见“专题-模板”。

23

Page 30: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.3.6.6 列表单元

当设置了表单单元对应的列表单元时,将出现“上一条”、“下一条”导航:

使用条件:表单单元和列表单元的数据模式为“SQL”; 多一次查询(对应为列表单元所有页的数据),对性能有一定影响,应避免对大表使

用; 相应的展现模板:fastunithome/template/nav.form.html,可自行调整表现方式。

5.3.6.7 TABLE 属性

设置于单元的 外层<table>标签内,可用来控制样式等。

5.3.7 列表属性

仅列表单元具有此部分属性。

5.3.7.1 查询单元

通过设置查询单元,可以为列表增加查询功能。 参见“专题-查询”。

5.3.7.2 每页行数、分页导航方式

每页行数 系统按此设置执行分页操作,默认值为 20(由配置文件决定)。 设为 0 或负数时不分页,显示全部数据。

分页导航方式 每页行数为正数时,显示指定的导航条:

文本导航:

图标导航:

下拉导航:

页码导航:

24

Page 31: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.3.7.3 标题行

是否显示标题行。

5.3.7.4 序号列

是否显示序号列,启用时,序号列显示在列表的第一列。

5.3.7.5 选择列

无:不显示; 单选:显示为单选按钮; 多选:显示为多选按钮;

当需要在表单提交后获取选中行序号时,对于单选或多选都使用如下方法: String[] checks = ac.getRequestParameters("_s_"+unitId);//unitId 为单元编号 获取的字符数组长度为数据行数,值为“1”的表示选中,否则表示未选中。

5.3.7.6 点击标记

鼠标点击某行时,以特殊颜色标记此行。标记效果由样式文件中的“RS”定义。

5.3.7.7 移动标记

鼠标移动到某行时,以特殊颜色标记此行。标记效果由样式文件中的“RO”定义。

5.3.7.8 交替行样式

格式: css1,css2,css3… 列表每条数据所属的行,交替使用设定的样式名。一般用来使列表的行交替使用不同的颜

色作为背景色。

默认使用域配置的“rows-config”属性; 不使用交替行的方法:在此属性中设置一个不存在的样式名,如“x”。

25

Page 32: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.3.8 内容

使用编辑器编辑静态内容,这些内容将显示于单元下方。 编辑器基于 FCKEditor 实现,当需要调整编辑器上的功能按钮时,可以修改配置文件

“/common/fckeditor/fckconfig.js”中 FCKConfig.ToolbarSets["Unit"]的定义。

5.3.9 页面属性

不可访问的单元不会使用此部分属性;可访问的单元以 URL“/domain/unitid.do”访问

时,页面属性将被使用;可访问的单元作为子单元时,页面属性不会被使用。

5.3.9.1 记录日志

是否允许记录该页面的访问记录。访问记录可以在管理控制台的日志查询中查看。 默认不记录日志,频繁访问或不必要的页面不应设为记录日志,否则将产生大量的日志记

录,会给系统带来一定负担。

5.3.9.2 PI

页面拦截器,实现 PageInterceptor 接口,设置多个 PI 时以“,”分隔。 可访问的单元在转换为 HTML 代码前,会将 Page 对象传入 PI 的 intercept 方法,通过

Page 对象可以控制页面属性。由于 Page 对象一般不需要动态设置,因此 PI 不常用。

5.3.9.3 页面模板

为页面定制模板文件,是一个相对路径,相对于{Home}/ template/。 默认页面模板为 page.html。

5.3.9.4 HEAD

放置于 HTML 代码的<head>和</head>之中。

5.3.9.5 CSS 引用

引入的 css 文件路径,多个文件之间以“,”分隔。此路径相对于应用根路径,以“/”开

头,例如“/app/test1.css,/app/test2.css”。

5.3.9.6 前 JS 引用、后 JS 引用

引入的 js 文件路径,多个文件之间以“,”分隔。此路径相对于应用根路径,以“/”开

头,例如“/app/test1.js,/app/test2.js”。 由于 html 代码是按顺序执行的,导致在某些情形下要求 js 文件预先引入(如,单元代码

中需要使用 js 文件中定义的对象),而某些情形下必须在 后引入(如,页面装载时直接

执行的 js 方法中需要获取表单对象),这就有了“前”、“后”之分。普通情形下,js 文

件放置在“前”或“后”没有区别。

5.3.9.7 BODY 属性

设置于<body>标签内。

26

Page 33: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4 元素

元素是视图中 小的展现单位。元素的值来自所属单元的数据或使用默认值。

5.4.1 操作说明

5.4.1.1 右键菜单

直接点击时新增“文本域”元素 新增元素

直接点击时新增“单元”元素

启用后,单元图标右下方出现红色 A 标志 “启用”标志

启用后,单元图标右上方出现蓝色 A 标志

变更元素类型删除元素

预设组件

基本组件、复合组件和高级组件组成了所有组件类型。预设组件通过预设了某个组件的部

分属性,直接生成一些常用元素。

自动标签 启用“自动标签”后,元素前会自动增加一个文本标签,该标签占用一个<td>,标签的内

容为元素的“名称”属性。 列表单元的元素以及“占列”属性为 0 的元素没有此选项。

需要授权 启用“需要授权”后,该元素成为一个权限点。 对于普通元素,没有权限时的展现方式由“无权模式”控制,对于 Action 元素,同时控制

Action 的执行权限。

Action 启用“需要授权”后,该元素成为一个“Action 元素”,可以通过 URL“/domain/unitid/elementid.do”来执行 Action。 任何一种类型的元素都可以设为 Action,不显示的 Action 元素可以放在闲置区。

5.4.1.2 元素图标

“Action”标志

元素类型图标

“需要授权”标志

红色警告字体 当某些元素组件必备属性为空时,元素图标内的文字为红色:

下拉等元素的“资源编号”; 图片等元素的“链接”;

27

Page 34: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

排序元素的“定制”。 此情形允许正常提交,因为有时需要通过 UI 来动态设置元素的某些属性。

元素图标背景色 不同元素组件的背景色,定义在/domain/dev/unit.css 文件中的 后一段,可自行修改。

5.4.1.3 新增元素

点击鼠标右键,选择新增的组件类型: 当点击位置为某个区域时,新元素放置于该区域的 后; 当点击位置为元素 B 时,新元素放置在元素 B 之前,如果新增元素为标签,自动获取

元素 B 的名称作为新元素的名称。

5.4.1.4 移动元素

鼠标左键点住元素 A 进行移动: 当移动到元素 B 上方时,元素 B 左侧显示一个蓝色竖线,松开鼠标则元素 A 移动到元

素 B 之前; 当移动到某个区域时,该区域边框变为蓝色,松开鼠标则元素移动到该区域 后一个

元素之后。 注:当元素过多无法拖至目标位置时,可将闲置区作为中转站。

5.4.1.5 管理元素

鼠标左键点击元素图标,下方则显示该元素的属性卡片:

只有 Action 元素会使用这两组属性 不同元素类型,此组

属性含义可能不同 控制布局

“基本”卡片:控制元素本身的全部规则; “TD”卡片:控制元素所属<TD>的规则,主要是样式控制; “验证”卡片:设置元素是否需要验证及验证规则。

5.4.2 布局管理

表现方式与业务逻辑完全分离:改变元素位置或布局模式,对业务逻辑无任何影响。

28

Page 35: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.2.1 布局视图

操作区

表格区

元素区域:

操作区:一般用于放置操作按钮; 表格区:只有表格区元素的“TD”卡片属性有效,表格区的元素可以灵活布局; 隐藏区:只用来放置“隐藏域”元素; 闲置区:一般用来放置待定元素或不显示的 Action 元素。闲置区的非 Action 元素

任何情况下都不会被使用。如上图所示,e6 不会被使用,而 Action 元素 e7 虽然

不会出现于页面,但可以通过 URL“/domain/unitid/e7.do”来执行 Action。

所见即所得,本例的页面效果为:

5.4.2.2 列数

控制表格区的列数。 对于列表单元,设为“0”或负数时表示不限制列数,所有元素显示为一行。

5.4.2.3 布局模式

布局模式用于将已分组的元素做不同方式的展现。 不同布局模式的展现效果参见演示中心的“单元布局-布局模式”。

布局模式介绍 布局模式 特点描述 未分组元素显示位置 纵向分组 从上至下排列 上方 纵向可隐藏分组 点击分组标题行可隐藏或打开该分组 上方 纵向预隐藏分组 初始状态只显示第一个分组 上方 纵向无标题分组 没有标题行 上方 横向分组 从左至右排列 左侧 横向无标题分组 没有标题行 左侧

隐藏区 闲置区

29

Page 36: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

双列分组 分组标题在左侧,分组元素在右侧 右侧的上方 纵向集合 元素置于<fieldset>内 上方 横向集合 元素置于<fieldset>内,从左至右排列 左侧 卡片 卡片罗列 所有卡片内上方 补充说明:

为使整体布局统一协调,应当使所有元素参与分组; 卡片的未分组元素,表面上在不同卡片内重复显示,实际是同一个元素。

统一不同分组区域宽度或高度的方法:

在某些布局模式下,各分组属于不同的<table>,此时需要在引入的 css 文件中设置系统指

定的样式来统一宽度或高度: 布局模式 控制内容 样式定义 横向分组 宽度和高度 .GHGC {height:200px;width:30%} 横向集合 宽度 .FH {width:30%;} 横向集合 高度 .FH FIELDSET {height:200px; } 双列分组 左列宽度 .GDT{width:20%;} 双列分组 右列宽度 .GDGW{width:80%;}

统一不同分组内列宽的方法: 使用单元的“列配置”可以定义统一的宽度规则。

5.4.2.4 分组配置

用于定义分组,将元素分组是使用布局模式的前提。 语法:

id1,name1,custom1;id2,name2,custom2;… id:分组标志,不能重复; name:分组名称; custom:可选项,用于特殊用途。所设的字符串放置于分组标题所属的<td>内。

注意不要包含语法分隔符“,”和“;”。除无标题分组外,其他布局模式均支持

custom 字串。

custom 选项的用途举例: 设置分组标题样式:class=aaa; 对于卡片可设置触发事件:onclick=aaa()。

5.4.3 基本属性

本节未说明的属性见元素类型,这些属性对不同类型的元素含义可能不一样。

5.4.3.1 元素编号

元素的唯一标志。“m”和“p”是系统关键词,不能被用作元素编号。 视图运行期间,元素对应的 HTML 对象的“name”属性被设置为: 单元编号+”.”+元素编号 在获取表单提交的值时,例如单元 u 的元素 e,应使用参数“u.e”来获取值。

5.4.3.2 名称

启用了自动标签时,作为标签的内容。

30

Page 37: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.3.3 占行/占列

对应为<td>的“rowspan”和“colspan”属性。 将“占列”设为 0 时,此元素与前一个元素在同一个<td>内。

5.4.3.4 默认值

元素所属单元的数据不为空且包含该元素的值时,优先被使用;否则,使用默认值。

5.4.3.5 CSS

样式名称,用于设置元素对应的 HTML 对象的“class”属性。 例如,页面引用的 css 文件中有如下定义: .aaa{color:red} 此处可设置为“aaa”

5.4.3.6 提示

对应为 HTML 对象的“title”属性,某些元素组件类型没有 title 属性。

5.4.3.7 显示模式、有权模式、无权模式

显示模式 在不同显示模式下,元素具有不同的表现方式: 显示模式 HTML 代码 是否生成 TD 表单提交后是否可取值 文本 值或名称 是 否 控件 控件 是 是 只读 只读控件 是 是 隐藏 <input type=hidden …> 否 是 空 空字符串 是 否 移除 (无) 无 否 以文本域元素为例,假设所属单元为“u”,元素编号为“e”,值为“x”,不同显示模

式的 HTML 代码如下: 文本 x 控件 <input type=text name=u.e value=’x’> 只读 <input type=text name=u.e value=’x’ readonly> 隐藏 <input type=hidden name=u.e value=’x’ > 补充说明:

某些类型的元素不包含值,如标签、图片,因此表单提交后无法取值; “空”和“移除”对所有类型的元素规则一致,其他 4 种显示模式参见具体的元

素类型。

有权模式 当前用户对本元素有权限时使用此设置,有 3 列选项(列表单元有 2 列,查询单元有 1列),分别对应为所属单元在“查看”、“修改”、“新增”的显示模式下,本元素采用

的显示模式。

无权模式 当前用户对本元素没有权限时使用此设置。

31

Page 38: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

通过程序控制元素显示模式的方法

拦截器中通过 Unit.getElement(elementid).setShowMode()设置,可使用常量定义类

ElementShowMode 来设置参数。

决定元素显示模式的流程:

5.4.3.8 前缀/后缀

所设字符串分别放置在元素的 HTML 代码之前和之后。

5.4.3.9 查询方式

只有查询单元的“文本域”和“文本区域”元素具有此属性: 精确:SQL 语句中使用“=” 模糊:SQL 语句中使用“like”,只有字符类型的字段支持模糊查询。“like”通常会

降低查询效率,对于大数据量的表应谨慎使用; 选项:查询界面上用户可以选择“精确”或“模糊”,默认设为“精确”; 范围:仅设置了起始值时,SQL 语句使用“>=”;仅设置了结束值时,SQL 语句使

用“<=”;设置了起始值和结束值时,SQL 语句使用“>=起始值 and <=结束值”; 注: 1. 对于不是“文本域”和“文本区域”类型的元素,查询方式使用精确。 2. 对于时间戳的范围查询,起始值只输入日期时系统自动附加“ 00:00:00”,结束值只

输入日期时系统自动附加“ 23:59:59”。

5.4.3.10 JS 排序方式

只有列表单元的元素具有此属性,启用后,在页面中点击元素标题可以触发排序,如图:

32

Page 39: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.4 TD 属性

当多个元素位于一个<td>内时,使用第一个元素的 TD 属性,其他元素的 TD 属性无效。

5.4.4.1 CSS

样式名称,对应了<TD>的“class”属性。

5.4.4.2 间距

控制 TD 与元素之间的间距。数据类型为整数,小于 0 无效,单位为象素。

元素

TD

上间距

右间距

下间距

左间距

5.4.4.3 定制

所设字符串放置于<TD>内。

5.4.5 验证属性

Action 元素可以指定“验证单元”,指定了“验证单元”后,执行 Action 前将依据此单元

所有元素的验证属性来执行验证。验证效果图:

5.4.5.1 必填、标记必填

必填

33

Page 40: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

设为必填时,表单验证环节不允许提交的数据为空字符串或连续空格。 通过向导生成时,如果元素对应的字段为不可空时,此属性会被向导设为必填。

标记必填 当元素设为必填时,是否在元素后以红色“*”标记。

5.4.5.2 长度限定

小长度:验证输入字符总长度不能小于此设置 大长度:验证输入字符总长度不能大于此设置 大精度:对于小数类型,验证小数点后的长度不能大于此设置

注:定长字符需要校验时,应将 小长度和 大长度设为相同。

5.4.5.3 系统验证器

系统验证器执行类型检查: (正/非负)整数:验证 Long 类型,短整数需要结合长度限定来验证。 (正/非负)小数:验证 Double 类型,短小数需要结合长度限定来验证。 日期:验证日期格式。 时间:验证时间格式。 时间戳:验证时间戳格式,日期格式也被认为合法。

5.4.5.4 定制验证器

实现接口 Validator 的类路径。用于执行特殊规则验证。

当指定了定制验证器时,系统验证器不会被使用。 所有元素组件都接受定制验证器,包括 Checkbox、Select 等。

5.4.5.5 验证表达式

验证表达式为验证器的辅助参数,当调用验证器方法时,此表达式作为字符串参数传入。 应用场景:验证器被多处使用,依据表达式的不同,做不同方式的验证

5.4.6 元素类型

不同类型的元素,部分属性及显示模式的含义稍有不同。

5.4.6.1 标签

将“定制”或“名称”内的字符直接输出,一般用于显示一个静态文本。当“定制”属性

不为空时会被优先使用。

属性 定制 标签内容

显示模式 文本 显示名称 控件 (同文本) 只读 (同文本) 隐藏 空字符串

34

Page 41: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.6.2 文本域

对应为 HTML 的<input type=”text”>对象。 输入字符中时不能包含双引号“””。

属性 宽度 单位为象素(px) 定制 设置在<input>标签内

显示模式 文本 显示值 控件 文本域 只读 只读文本域(readonly) 隐藏 隐藏域

5.4.6.3 隐藏域

对应为 HTML 的<input type=hidden>对象。

属性 定制 设置在<input>标签内

显示模式 文本 (同隐藏) 控件 (同隐藏) 只读 (同隐藏) 隐藏 隐藏域

5.4.6.4 下拉

对应为 HTML 的<select>对象。

属性 资源编号 枚举编号 宽度 单位为象素(px) 高度 可见行数 定制 设置在<select>标签内

显示模式 文本 显示值 控件 下拉 只读 失效下拉,附加隐藏域 隐藏 隐藏域

5.4.6.5 按钮

对应为 HTML 的<input type=button>对象。

属性 宽度/高度 单位为象素(px) 定制 设置在<input>标签内,一般是 onclick 事件。对于 Action 元素,当此属性

35

Page 42: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

为空时系统会自动加 onclick=doSubmit()方法。 为按钮设置快捷键的方法:“定制”属性内添加 accesskey=X,使用“ALT+X”可以触发

按钮的 onclick 事件。

显示模式 文本 (同控件) 控件 按钮 只读 无法响应的按钮 隐藏 空字符串

5.4.6.6 单选

对应为 HTML 的<input type=radio>对象。 不能用于列表单元,由于名称相同使多行之间只能有一个被选中,此时应该使用“下拉”

元素。

属性 资源编号 枚举编号 定制 设置在<input>标签内

显示模式 文本 显示值对应的名称 控件 单选 只读 失效单选,附加隐藏域 隐藏 隐藏域

5.4.6.7 文本区域

对应为 HTML 的<textarea>对象。 输入字符中时不能包含字符串“</textarea>”。

属性 宽度 单位为象素(px) 高度 可见行数 定制 设置在<textarea>标签内

显示模式 文本 显示值 控件 文本区域 只读 只读文本区域(readonly) 隐藏 隐藏域

5.4.6.8 锚

对应为 HTML 的<A>对象。 在列表单元中可以将一个元素设为锚用于链接,此时 好使用主键字段,避免值为空无法

显示链接。数据表达式($D{})一般会同时使用,用于定位数据。

属性 链接 点击后转向的 url 定制 设置在<a>标签内

36

Page 43: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

显示模式

文本 (同控件) 控件 锚。当数据中包含此元素的值或设有默认值时,显示值,否则显示名称 只读 显示名称 隐藏 空字符串

5.4.6.9 图片

对应为 HTML 的<img>对象。

属性 链接 图片 url 宽度/高度 单位为象素(px) 定制 设置在<img>标签内。<img>的常用属性为 alt 等。

显示模式 文本 (同控件) 控件 图片 只读 (同控件) 隐藏 空字符串

5.4.6.10 Flash

用于显示一个 Flash 文件。

属性 链接 Flash 文件 url,相对路径(相对于应用根路径,以“/”开头) 宽度/高度 单位为象素(px) 定制 设置在<object>标签内

显示模式 文本 (同控件) 控件 图片 只读 (同控件) 隐藏 空字符串

5.4.6.11 密码

对应为 HTML 的<input type=password>对象。 为保护密码所有者,密码在任何模式下都不会出现在 html 代码内,即使控件模式下读取,

密码的值也被置为空。此外,密码存储到数据库之前应当经过加密。

属性 宽度 单位为象素(px) 定制 设置在<input>标签内

显示模式 文本 空字符串 控件 密码类型的文本域 只读 (同文本)

37

Page 44: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

隐藏 (同文本)

5.4.6.12 重置按钮

对应为 HTML 的<input type=reset>对象。

属性 宽度/高度 单位为象素(px) 定制 设置在<input>标签内

显示模式 文本 (同控件) 控件 重置按钮 只读 无法响应的按钮 隐藏 空字符串

5.4.6.13 文件选择

对应为 HTML 的<input type=file>对象。

属性 宽度 单位为象素(px) 定制 设置在<input>标签内

显示模式 文本 (同控件) 控件 文件 只读 (同控件) 隐藏 空字符串

5.4.6.14 帧

对应为 HTML 的<iframe>对象。

属性 链接 引用的 url 宽度/高度 单位为象素(px)。如果希望使用相对宽度,可以在“定制”内设设置,

如“width=100%” 定制 设置在<input>标签内。<iframe>的常用属性为 frameborder、scrolling 等

显示模式

文本 (同控件) 控件 帧 只读 (同控件) 隐藏 空字符串

5.4.6.15 图文按钮

带图标的按钮,实现了 Windows 风格的立体效果。 为达到完整效果,需要将元素外层 HTML 对象的样式设为“B”(用于控制背景色)。

38

Page 45: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

属性 链接 图标路径。可以有 2 个图标,以“,”分隔,第一个是控件模式的图标,

第二个是失效模式的图标。 定制 设置在<span>标签内,一般是 onclick 事件。对于 Action 元素,当此属性

为空时系统会自动加 onclick=doSubmit()方法。

显示模式 文本 (同控件) 控件 按钮 只读 无法响应的按钮 隐藏 空字符串

5.4.6.16 下拉域

可编辑的下拉列表(只读方式不可编辑),键入字符时自动过虑选项。 提交后可按文本域方式取值。

属性 资源编号 枚举编号 宽度 单位为象素(px) 高度 选项列表的高度,超出指定高度时出现滚动条 定制 设置在<input>标签内

显示模式 文本 显示值 控件 可编辑的下拉列表 只读 不可编辑的下拉列表 隐藏 隐藏域

5.4.6.17 多选下拉

多值之间以“,”分隔,头尾不包含“,” ,因此枚举值中不能包含“,”。 提交后可按文本域方式取值。 在查询单元中,可以使用此元素实现多选查询。

属性 默认值 多值时以“,”分隔 资源编号 枚举编号 宽度 单位为象素(px) 高度 可见行数 定制 设置在<select>标签内(onblur 方法已被系统占用)

显示模式 文本 显示值对应的名称,多名称之间以“,”分隔 控件 下拉 只读 失效下拉,附加隐藏域 隐藏 隐藏域

39

Page 46: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.6.18 全局单选

列表单元的控件模式下,多行值之中,只能有一个被选中,未被选中的值为空,提交后可

按文本域方式取值。列表控件模式下提交后获取值,得到的是一组值,这是与“单选”元

素的区别,“单选”元素只能获取一个值。

属性 资源编号 枚举编号 定制 设置在<input>标签内

显示模式 文本 显示值对应的名称 控件 单选 只读 失效单选,附加隐藏域 隐藏 隐藏域

5.4.6.19 选择域

提交后可按文本域方式取值。选中时值为 1,未选中时为 0。 在查询单元中,自动以单选形式展现。

属性 默认值 1 或 0,为空或非 1 的值认为是 0 定制 设置在<input>标签内

显示模式 文本 显示“是”或“否” 控件 多选 只读 失效多选,附加隐藏域 隐藏 隐藏域

5.4.6.20 多选集

多值之间以“,”分隔,头尾不包含“,” ,因此枚举值中不能包含“,”。提交后可按文本

域方式取值。 在查询单元中,可以使用此元素实现多选查询。作为查询条件时,全选和全不选效果是一

样的。

属性 默认值 多值时以“,”分隔 资源编号 枚举编号 定制 设置在<input>标签内

显示模式 文本 显示值对应的名称,多名称之间以“,”分隔 控件 多选按钮 只读 失效多选按钮,附加隐藏域 隐藏 隐藏域

40

Page 47: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.6.21 排序

仅在查询单元中有效,供使用者选择排序条件。显示为下拉列表,内容为定制中设置的字

段。控件模式下附加“正序”和“倒序”的选项。

注意事项: 一个查询单元只应包含一个排序元素,有多个时,只有 后一个有效 字段名非法时,系统将抛出 Unchecked 配置异常 有些数据库要求排序字段必须在查询结果内

属性

默认值 默认排序字段,可以不是定制中列举的字段 宽度 单位为象素(px) 高度 可见行数 定制 语法:字段名 1,显示名称 1; 字段名 2,显示名称 2;…

显示模式 文本 (同控件) 控件 下拉控件+单选控件 只读 下拉控件 隐藏 空字符串

5.4.6.22 单元

用于引入子单元。

属性 资源编号 单元编号

显示模式 文本 (同控件) 控件 单元 只读 (同控件) 隐藏 空字符串

5.4.6.23 树

属性 资源编号 树编号

显示模式 文本 (同控件) 控件 树 只读 (同控件) 隐藏 空字符串

5.4.6.24 统计图

属性 资源编号 统计图编号 宽度/高度 单位为象素(px)

41

Page 48: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

定制 设置在<img>标签内

显示模式 文本 (同控件) 控件 统计图 只读 (同控件) 隐藏 空字符串

5.4.6.25 编辑器

基于 FCKEditor 实现。FCKEditor 的配置文件为/common/fckeditor/fckconfig.js。web.xml文件中,Servlet“SimpleUploader”的参数定义了文件上传的规则。

属性 宽度/高度 单位为象素(px) 定制 ToolbarSet 名称,需要在 fckconfig.js 中有相应配置,为空时使用

FCKEditor 的默认值“Default”

显示模式 文本 显示值 控件 编辑器 只读 (同控件) 隐藏 空字符串

5.4.6.26 自定义

由 ElementWriter 控制显示。自定义元素不受显示模式控制。 自定义元素的“定制”属性必须设置一个实现了接口 ElementWriter 的类路径。

5.4.7 预设元素

预设元素也是基本元素,只是预先设置了一些属性,以提高开发效率,主要为常见的操作

按钮等。

5.4.7.1 返回

按钮,“定制”中预设 onclick=doLink('/app/xxx.do')。 创建后应修改 doLink 方法内的 url 路径。

5.4.7.2 保存

按钮,预设为“需要授权”(红色 A 标志)、“Action”(蓝色 A 标志)。 创建后可能需要补充的属性有:验证单元、Action、命令行、成功(失败)转向、成功

(失败)消息等。

5.4.7.3 新增

按钮,“定制”中预设 onclick=doLink('/app/xxx.do?m=a')。 创建后应修改 doLink 方法内的 url 路径,保留“?m=a”。

42

Page 49: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.4.7.4 删除

一般用于列表单元,按钮,预设为“需要授权”、“Action”。 创建后可能需要补充的属性有:验证单元、Action、命令行、成功(失败)转向、成功

(失败)消息等。

5.4.7.5 添加/移除

一般用于列表单元,按钮,执行 JavaScript 动态增删数据,效果同表组件的字段管理。 创建后直接使用,但需要启用单元的“支持 Js 新增”。

5.4.7.6 重置/查询

仅用于查询单元,按钮,预设为“Action”并已设置了 Action 类。 创建后可能需要补充的属性有:成功(失败)转向,查询按钮可能需要设置“验证单

元”。

5.4.7.7 查看/修改

仅用于列表单元,通常用来转向到表单单元以查看数据明细。 创建后需修改“链接”属性(保留 m 参数)。

5.4.7.8 导出

仅用于列表单元,将所属列表单元的数据导出为 Excel 文件。 创建后直接使用,也可以转变为“锚”元素(相应的用“链接”属性取代按钮的定制属

性)。 默认的 Action 设置为 com.fastunit.support.action.Unit2ExcelAction,仅导出当前页数据;

如需导出全部页,将 Unit2ExcelAction 换为 Unit2ExcelAllAction 即可。

5.5 Action

5.5.1 Action 属性

5.5.1.1 令牌检查

阻止重复提交和非表单提交的方式。启用令牌检查后,Action 必须满足以下条件时才会顺

利执行: 表单提交(以 url“/domain/unitid/elementid.do”直接访问不是表单提交) 非重复提交

5.5.1.2 验证单元

多个单元之间以“,”分隔。 Action 执行前对指定的单元数据做验证,验证的依据是元素的验证属性。注意单元编号不

要重复,否则会重复验证。

5.5.1.3 数据源

使用默认 Action 类时,使用指定的数据源创建 DB 类,默认使用域设置的数据源。

43

Page 50: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.5.1.4 AI

Action 拦截器,实现接口 ActionInterceptor。多个拦截器之间以“,”分隔。

5.5.1.5 Proxy

默认值为 DefaultProxy(配置于 domain.xml),直接以类装载的方式调用 Action。 此设置一般不需要单独设置,而是通过 domain.xml 来统一调用方式。

5.5.1.6 Action

实现了 Action 接口的类路径,也可以是实现 TransactionAction 或 DefaultAction 的类。 为空时默认使用 DefaultAction,执行 Action 命令行逻辑,也只有 DefaultAction 及其子类

会自动执行命令行。不需要命令行时,可以使用 TransactionAction 或 Action。

5.5.1.7 命令行

命令行逻辑由 DefaultAction 执行,以简单的语法实现表的操作。 命令行指定了表名和包含此表数据的单元,对表执行何种操作的信息由系统设置于单元数

据之中,系统会自动执行新增、修改或删除操作。

简单语法 T1,U1;T2,U2;… 指令含义:对表 T1 执行操作,数据来自单元 U1;对表 T2 执行操作,数据来自 U2;

完整语法

表 T1的字段

名 Request 参数名

第一个单元为主

单元,此单元的

“映射表”必须

设为 T1

表 T1的字段

名 表名

表 T1S的字段

T1 的子

表表名

表 T1 数据被删除

时,依据关联字段

同时删除子表数据

可以为字段

单独指定数

据来源

不同表之间以

“;”分隔 多个关联字

段之间以

“/”分隔

数据可来自

多个单元,

以“/”分隔

指令含义:对表 T1 操作,操作数据来自单元 U1、U2,其中 T1 的字段 C1、C2 的数据来

自指定的 Request 参数 P1、P2;当 T1 的数据被删除时,按关联字段“F1=S1/F2=S2”同时删除子表 T1S 的相关数据。

补充说明 表名和单元编号为必填; 当表的某个字段不存在于指定的单元或 Request 参数中时,此字段不参与操作; 取值优先级:数据来自多个单元时,如果多个单元都包含相同的元素,按单元的

排列顺序取值 ;

44

Page 51: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.5.2 ActionResult 属性

5.5.2.1 成功转向/失败转向

设置 Action 成功或失败后转向的 URL。未指定时返回原页面。 程序控制转向的方法(优先使用): ActionResult.setUrl()

5.5.2.2 成功消息/失败消息

设置 Action 成功或失败后的提示消息。 程序控制消息的方法(优先使用): ActionResult.addInfo() ActionResult.addError()

5.5.2.3 JS 脚本

JS 脚本只有在 Action 成功后才会执行。 可以是任意一段 JavaScript 脚本,也可以是页面引用的 js 文件中的方法。例如,可以是

“alert(‘保存成功’);”或“aaa();”。

5.5.3 执行流程

5.5.3.1 触发

触发 Action 的方式是提交表单至 Action 的 URL“/domain/unitid/elementid.do”。 对于“按钮”和“图文按钮”类型的 Action 元素,并且其“定制”属性为空时,系统会自

动为其设置触发事件“onclick=doSubmit(url)”。除此情况之外,应当在“定制”属性中

手动设置触发事件。

5.5.3.2 权限检查

判断用户是否对此 Action 拥有权限。

5.5.3.3 令牌检查

启用了令牌检查时,阻止重复提交。

5.5.3.4 记录日志

记录当前用户的操作行为。

5.5.3.5 表单验证

如果指定了 Action 属性中的“验证单元”,则依据单元中元素的验证属性检查提交的数据

是否合法,验证未通过时返回原页面,并提示验证失败的原因。

45

Page 52: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.5.3.6 执行 Action

未指定 Action 类时,使用默认的 DefaultAction 执行命令行逻辑;设置了自定义的 Action类时,执行 Action 的 execute()方法。如果 Action 执行失败,提交的数据自动还原。

5.5.3.7 流转

Action 执行结束后,转向下一个页面。

5.5.4 Action 接口

Action

execute()

TransactionAction

doAction()

DefaultAction

Action:接口 TransactionAction:实现了事务处理 DefaultAction:默认 Action,执行命令行逻辑

5.6 框架

框架是单元的一种类型,用来表现帧结构的视图。

5.6.1 属性说明

5.6.1.1 框架代码

<frameset>至</frameset>部分的代码。

5.6.1.2 模板

为框架定制模板文件,是一个相对路径,相对于{Home}/ template/。 默认框架模板为 frameset.html。

5.7 报表

报表是单元的一种类型,基于开源软件 JasperReports 实现。 需要使用 iReport(参见附录)等工具设计报表,平台仅能依赖 jasper 文件来输出报表。

此外,平台可为报表提供数据、使用数据权限、设置访问权限等。

46

Page 53: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.7.1 操作说明

iReport 设计时指定

了 SQL 语句时,此

部分属性不会被使用

5.7.2 属性说明

5.7.2.1 jasper 文件名

jasper 文件的相对路径(相对于应用根路径,以“/”开头)。此属性不能为空。

5.7.2.2 数据源

为空时使用域配置文件中的设置。

5.7.2.3 解析类

报表解析类的类路径,该类需要继承 ReportWriter(参见 javadoc)。 通常情况下此属性设为空,仅当需要程序动态控制报表、或改变系统输出报表的方式时才

应使用解析类。要求开发者熟悉 JasperReports 的框架结构。

5.7.3 报表数据

5.7.3.1 报表设计时指定 SQL 语句

即完全依赖 jasper 文件获取数据。 此时属性“SQL”、“数据权限”、“查询单元”、“映射表”不会被使用。

5.7.3.2 由平台生成 SQL 语句

当需要动态生成 SQL 语句、使用数据权限或设置查询条件时,可使用平台机制产生 SQL语句,使用步骤如下: 1. iReport 中,设置一个 String 类型的参数(Parameter),命名为“sql”:

47

Page 54: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

2. iReport 中,将此报表的查询语句设为“$P!{sql}”:

3. 报表管理页面中,配置“SQL”属性,可以使用表达式; 4. 当需要使用数据权限时,指定数据权限,要求 SQL 语句中包含“${DP}”参数; 5. 当需要配置查询单元时,要同时设置“查询单元”和“映射表”,查询单元中可以设

置排序字段。查询单元的查询按钮的“转向”设置指向此报表的 URL 即可。

5.8 枚举

枚举是一组由值和名称组成的数据,枚举只会被下拉、单选、多选下拉、全局单选和多选

集元素所引用,用来构成数据选项。

48

Page 55: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.8.1 操作说明

预览 数据相关属性

5.8.2 枚举属性

5.8.2.1 启用缓存

将枚举数据存储至内存以提高效率。默认为启用。 两种情况不应该启用缓存:

动态数据:如果缓存会造成内容失真 节点过多:如超过 10000 个节点,可能会造成内存负担

5.8.2.2 数据模式和数据表达式

数据模式 说明 数据表达式 静态值 使用节点作为数据 无 SQL 使用 sql 语句获取数据 sql 语句;结果集要包含“name”和

“value”两列,“custom”列可选。 MapListFactory 使用 MapListFactory 设

置数据 类路径。该类实现接口 MapListFactory。MapList 对象中要包含“name”和

“value”两列,“custom”列可选 注:当数据模式设为 SQL 或 MapListFactory 时,仍可以附加静态节点,节点编号大于 0(含 0)的附加在后面,小于 0 的附加在前面。 图标示例:

5.8.2.3 数据源

数据模式为“SQL”时所要使用的数据源,默认使用域设置的数据源

5.8.2.4 数据权限

枚举在三种数据模式下都可以使用数据权限,数据模式为 SQL 时,要求 SQL 语句中包含

“${DP}”字符串,“${DP}”在运行期间会被替换为当前用户所具有的条件语句。 枚举设置了数据权限后,所有引用此枚举的元素自动受数据权限控制。

49

Page 56: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.8.2.5 授权说明

在角色授权页面,鼠标移至此枚举时显示此说明,供授权人员参考。

5.8.3 节点属性

5.8.3.1 节点编号

整数类型,节点的唯一标志,同时决定节点显示顺序,可以为负数。

5.8.3.2 值

值允许重复。

5.8.3.3 名称

可以使用标签表达式

5.8.3.4 定制

用于分别控制各选项的样式或触发事件等,所设字符串放置在选项对应的 HTML 标签内,

对于下拉、多选下拉放置于<option>内,对于单选、全局单选、多选集放置于<input>内;

5.8.3.5 有效

无效的节点不会被使用。

5.9 树

树的显示是以 JavaScript 方式实现的。树可用于显示菜单,或其他树型结构的数据。

5.9.1 表现方式

树有 3 种表现方式: 树状菜单:

水平菜单:

50

Page 57: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

右键菜单:

(“右键菜单”需要手动创建,参见“API 简介”中的“tree.js”部分。)

5.9.2 操作说明

仅使用“基本”属性组即可完成主要工作,其余属性组一般用来控制表现细节或高级特

性。

右键菜单:新

增和删除节点

移动节点: 左键点

住节点,移动,至

目标位置放开鼠标

点击节点出现

节点配置界面

点击空白区域出

现树配置界面

5.9.3 树属性

5.9.3.1 皮肤路径

样式文件路径,相对于应用根路径,以“/”开头。默认路径为

“/common/tree/tree.css”。

5.9.3.2 图标路径

树节点图标路径,相对于应用根路径,以“/”开头。默认路径为“/common/tree/i/”,当

需要自定义图标时,所设路径内要包含默认路径中的全部文件名。

51

Page 58: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.9.3.3 展开全部节点

树第一次展现时,是否展开所有节点。

5.9.3.4 启用缓存

将树的节点数据缓存至内存以提高效率。对于动态的、启用了权限过滤或使用了表达式的

树,不应启用缓存。

5.9.3.5 DIV 属性

树的显示被限定在一个<div>标签内,此处设置的字符串将被加入此<div>内,一般可用来

设置高度、宽度等样式属性。 例如: style='height:300px;width:200px;overflow:auto;' 表示树所在区域高度固定为 300px、宽度 200px,自动出现滑动条。

5.9.3.6 TreeFactory

TreeFactory 是一个抽象类,通过抽象方法 createTree 返回一个 Tree 对象。通过

TreeFactory 可以实现动态树。如果此处设置了一个 TreeFactory 的实现类,将不会使用树

节点,而完全使用 Tree 对象作为树节点。

5.9.3.7 TreeWriter

TreeWriter 是一个接口,用来实现树的显示, 当需要自行控制树的表现形式时可设置

TreeWriter。由于树的显示较复杂,此属性一般很少使用。

5.9.3.8 启用选择

启用后使树节点具有选择功能,每个树节点前将会出现一个多选框。表单提交后可通过名

称“_treecheck”获取选中节点的数据。

5.9.3.9 启用移动

启用后使节点具有移动功能。

5.9.3.10 启用加入

当支持移动节点时,是否支持移动的节点成为其他节点的子节点。

5.9.3.11 移动前拦截

移动前调用的 JavaScript 方法,该方法需要包含在“前 JS 引用”的文件中,可用来控制

是否允许移动。

5.9.3.12 移动后拦截

移动后调用的 JavaScript 方法,该方法需要包含在“前 JS 引用”的文件中,可用于控制

是否允许移动到当前位置。

52

Page 59: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.9.3.13 启用权限过滤

是否通过权限系统控制节点的可见性,需要配合节点的“权限过滤”部分的属性来实现。

5.9.4 节点属性

5.9.4.1 动作类型/ URL/方法名

用于控制点击节点时发生的行为: 动作类型 说明 URL/方法名 链接 链接到指定的 URL URL 方法 执行 JavaScript 方法 JavaScript 方法名(不带括号)

5.9.4.2 链接目标

当动作类型为“链接”时可以设置,对应为<A>对象的 target 属性。可设的值为:_self,_blank,_parent,或帧名等。为空时使用父节点的“链接目标”属性,因此,如果所有节

点的 target 一致时,可以只设根节点。

5.9.4.3 有效

对于无效的节点,本节点及其所有子节点将不会显示。

5.9.4.4 提示

鼠标移至节点时显示的文字。

5.9.4.5 CSS

对应为<A>的 class 属性

5.9.4.6 定制

设置于标签<A>内,可用于控制样式等。

5.9.4.7 多选框值

支持选择时此属性有效,表单提交后获取的值,为空时设为节点编号。

5.9.4.8 多选框属性

设置于标签<input type=”checkbox”>内。

5.9.4.9 目标单元

当启用权限过滤并且本节点需要控制权限时,此处填写目标单元,格式: domain/unitId/unitShowMode 说明:

此属性未填或设置不合法时,不对此节点做权限过滤; 前后不能包含“/”; unitShowMode 可选,表示单元显示模式,“s”表示查看模式,“e”表示修改模

式,“a”表示新增模式,为空时表示“s”。

53

Page 60: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

对本节点是否有权限依赖于用户对目标单元拥有指定显示模式的权限。 当节点不可见时,所有子节点同时不可见。 目标单元为空时不对此节点做权限检查。

5.9.4.10 过滤方式

当对节点没有权限时的处理方式: 不可见:此节点不显示 失效:显示节点,但点击节点时不会有动作发生

5.10 统计图

基于开源软件 JFreeChart 实现。经过封装后可以在可视化界面中开发,使用中不必关心

JFreeChart 的技术细节。 使用方法:通过“统计图元素”将统计图加入单元。

5.10.1 统计图类型

分类图是一个大类,除饼图外其他统计图类型都属于分类图,分类图一般按轴线排列数

据。

5.10.2 操作说明

仅使用“基本”卡片就可以完成主要工作,其余卡片一般用来控制表现细节。

共有属性 分类图专有属性

饼图专有属性

5.10.3 基本属性

5.10.3.1 标题

统计图的标题,如果不希望统计图有标题,可以设为空。

5.10.3.2 宽度/高度

图片的大小,单位为象素,默认值为 500/300。

5.10.3.3 数据模式和数据表达式

数据模式和数据表达式共同决定了统计图的数据。

54

Page 61: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

数据模式 说明 数据表达式 SQL SQL 语句(可以使用表达式) MapListFactory 设置 MapList 数据对象 类路径。该类实现接口 MapListFactory DatasetFactory 设置 Dataset 数据对象,

Dataset 是 JFreeChart 提供的接口

类路径。该类实现接口 DatasetFactory

静态值 一般用于测试用途 格式:y=xxx,r=xxx,c=xxx;… 当数据模式不是 Dataset 时,数据中要包含如下属性名称: 属性名称 含义 说明 y 数据值 对应为图形 c 列名 对于分类图“c”值相同的会被分在一组显示。 r 行名 饼图只有一组数据,因此不具备此属性。

5.10.3.4 数据源

数据模式为“SQL”时所要使用的数据源,默认使用域设置的数据源。

5.10.3.5 查询单元/映射表

数据模式为“SQL”时,可以为统计图设置查询单元,必须同时设置映射表。 查询单元和统计图可以不在同一个页面中。

5.10.3.6 JFreeChartFactory

当需要自行创建一个 JFreeChart 对象时,此处填写一个实现了接口 JFreeChartFactory 的

类路径。设置了 JFreeChartFactory 后,除 JFreeChartSetter 之外的所有属性将无效。

5.10.3.7 JFreeChartSetter

当需要动态设置 JFreeChart 对象时,此处填写一个实现了接口 JFreeChartSetter 的类路

径。

5.10.4 数据图区属性

5.10.4.1 数据标签格式

用于显示数据项的值。 {0}代表名称,{1} 、{2}代表数值或百分比。 例如,“{0}: {1} ({2})”,将显示为类似“名称: 321 (23%)”。

5.10.5 饼图属性

5.10.5.1 分离百分比

将某几个数据块分离出来,例如,“0,1;1,0.2;2,0.2;”表示将第 1、2、3 项分离,偏离百

分比分别为 100%、20%、20%。效果图如下:

55

Page 62: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.10.6 权限控制

统计图是通过图片的 URL 来访问的: /chart/domain=xxx&unitid=xxx&elementid=xxx chart 这个 Servlet 通过判断这个元素是否有权限来决定是否显示统计图的,如果需要控制

某个统计图的权限,应将对应的统计图元素设为需要授权。

5.10.7 案例

假设柱状图的数据如下: y=50,r=苹果,c=2005;y=22,r=香蕉,c=2005;y=32,r=梨,c=2005; y=63,r=苹果,c=2006;y=17.49,r=香蕉,c=2006;y=41,r=梨,c=2006; 对应的图形为:

5.11 数据权限

数据权限应用于单元和枚举,用于控制用户对单元数据和枚举数据的访问权限。数据权限

作为权限点之一会出现在角色授权界面。

5.11.1 使用说明

使用数据权限的方法:在单元或枚举界面中选择相应的数据权限。

数据权限节点和授权 每个节点作为一个权限点出现,拥有某个节点即拥有该节点表达式指定的数据权限。

56

Page 63: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

在单元中使用数据权限 数据模式为“SQL”类型的单元才可以使用数据权限,且只能使用“SQL 语句”类型的数

据权限节点,如果设置了“值”类型的节点将会被忽略。

在枚举中使用数据权限 枚举的数据模式为“SQL”时,可以使用“SQL 语句”类型和“值”类型的数据权限节

点,枚举的数据模式为“静态值”或“MapListFactory”时,只能使用“值”类型的数据

权限节点。

原始 SQL 与数据权限的关系 使用“SQL 语句”类型的数据权限节点时,原始 sql 要包含${DP},${DP}在运行期间被替

换为当前用户对应的条件语句,替换规则为: 当用户没有任何权限时,${DP}被替换为“ 1=2 ”;当用户具有至少一个权限时,${DP}被替换为“ ( (节点 a 对应的条件) or (权限 b 对应的条件) or …) ”

注意事项 如果一个表需要做数据权限控制,一般来说,此表对应的列表单元和表单单元都应该配置

并且使用同一个数据权限,而不是仅仅控制列表单元,否则通过 url 直接进入表单单元

时,数据将不被保护。

5.11.2 节点属性

5.11.2.1 节点编号

整数类型,是节点的唯一标志,同时也决定节点的显示顺序。

5.11.2.2 类型和表达式

类型 说明 表达式 SQL 条件 可用于单元和枚举 SQL 语句的条件。主要使用 User 表达式来

表达,可以使用所有表达式。 SQL 条件接口 可用于单元和枚举,SQL

条件由 SqlProvider 提供 实现 SqlProvider 的类路径,例如

“com.fastunit.app.MySqlProvider” 值 只能用于枚举 枚举值 “SQL 条件接口”补充说明:可以提供一个动态 SQL 条件。(指定的 SqlProvider 实例化

后被缓存,此 SqlProvider 需要设置成员变量时需谨慎。)

5.11.2.3 授权说明

在角色授权页面,鼠标移至此节点时显示此说明,供授权人员参考。

5.11.3 案例

需求 类型为“SQL 条件”的表达式 看所有数据 1=1 看本人创建的数据 创建人字段=‘$U{userid}’ 看本部门数据 部门字段=‘$U{organizationid}’ 看开发部数据 部门字段=‘开发部’ 财务部看所有数据 ‘$U{organizationid}’=’财务部’ 财务部看开发部数据 ‘$U{organizationid}’=’财务部’ and 部门字段=‘开发部’

57

Page 64: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

看所有下级部门数据 机构字段 like $U{organizationid} (假设机构编码规则为:下级部

门编号以上级部门编号开头) 审批金额高于 10 万元

的数据 money>100000

5.12 自增器

自增器是表的字段“值生成器”来源之一,每次取值时,自动产生一个唯一的字符串。 注:对于简单的数字增长,不应使用自增器,直接使用数据库的自增字段效率会更高。

5.12.1 使用说明

自增器生成规则: 前缀+字符串生成器前缀+ (当前值+增量)+ 字符串生成器后缀+后缀

设计自增器时,应注意产生的值要符合目标字段的要求,如字段类型、长度等。 自增器会自动出现在字段的“值生成器”列表下方。 自增器开始使用后, 好不要再改变配置,必须改动时需要熟悉生成规则,避免变动

后取值出现重复,配置改变不需重新启动服务器。

5.12.2 属性说明

5.12.2.1 初始值

第一次取值的数值,自增器第一次被使用后,初始值会自动变化。使用中如果服务器重新

启动,可能会使数值不连续。

5.12.2.2 增量

数字部分每次累加的数值量,可以为负数,不能设为 0。

5.12.2.3 数字固定长度

设为正整数时,如果数字部分长度小于指定长度,以“0”在数字前补足长度;如果数字

部分长度大于指定长度,数字部分不变。 设空时,使用原始数字。

5.12.2.4 同步间隔次数

自增器开始使用后,每到达指定的间隔次数后,会自动更新“初始值”属性,使缓存中的

数值和数据库同步,这样可以保证再服务器中断后生成的值不出现重复。 此数值越大,数据库操作频率越低,一般可设为 1000,取值频率比较低或比较高时,可适

当调低或调高此设置。

5.12.2.5 前缀和后缀

生成的字符串前后会附加指定的前缀和后缀。

58

Page 65: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

5.12.2.6 字符串生成器

可为自增量设置动态前缀和后缀,需实现接口 IncrementorStringCreator。

5.12.3 案例

假设自增器设置如下: 同步间隔次数 100 初始值 0 增量 2 前缀 a 后缀 b 第 1 次取值:a0b ,自增器的初始值被设为 200 第 2 次取值:a2b … 第 100 次取值:a200b,自增器的初始值被设为 400 第 101 次取值:a202b 如果此时将服务器停止再重新启动,下一次取值将从 a400b 开始。

6 专题

6.1 查询

查询单元用于设置查询条件,列表单元通过设置“查询单元”属性而具有查询功能。

6.1.1 查询单元

查询单元的元素如果在列表单元的映射表中不存在相应字段时,此元素的条件将被忽略。

6.1.1.1 查询按钮

“查询”按钮是必需的,用于设置查询条件。 两种创建“查询”按钮的方法:

直接创建:点击“预设组件”的“查询”; 手动创建:新建一个按钮元素,将其设为 Action,并指定“Action”类为

“com.fastunit.support.action.QueryAction”

6.1.1.2 重置按钮

“重置”按钮是可选的,用于将所有查询条件恢复为默认值(注意不是将条件置空)。 两种创建“重置”按钮的方法:

直接创建:点击“预设组件”的“重置”; 手动创建:新建一个按钮元素,将其设为 Action,并指定“Action”类为

“com.fastunit.support.action.ClearAction”

6.1.1.3 元素变形

以下元素在查询单元中会发生某些改变: 下拉:未设为必填并且不存在空选项时,增加空选项;

59

Page 66: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

单选:未设为必填并且不存在空选项时,增加“全部”选项 选择域:转换为单选,未设为必填时包含“全部”、“是”、“否”3 个选项,设为

必填时包含“是”、“否”2 个选项

6.1.1.4 必填条件

查询单元中设为“必填”的元素如果没有值,列表单元将不会有数据。对于范围类型的必

填元素,起始值和结束值都不允许为空。

6.1.1.5 多选查询

多选查询可以通过“多选下拉”和“多选集”元素来实现。

6.1.2 对列表单元的要求

必须设置“映射表”; 数据模式为“SQL”。

6.2 用户权限

6.2.1 权限点

所有权限点一览: 权限点 设置方式 没有权限时的处理方式 说明 可访问单元的

显示模式 转向“/app/accessfailed.do”, 提示没有权限

不可访问单元

的显示模式

将单元设为需

要授权 空字符串 一般不必设为权限

点 元素权限 由元素的无权模式决定 Action

将元素设为需

要授权 转向“/app/accessfailed.do”, 提示没有权限

单元数据权限 为单元设定数

据权限 SQL 条件不被使用 SQL 条件、SQL

条件接口 枚举数据权限 为枚举设定数

据权限 SQL 条件不被使用、值被排除 SQL 条件、值

补充说明:

树节点本身不是权限点,但可以通过设置“目标单元”而受到权限控制; 当单元编号、元素编号、枚举编号、数据权限的节点编号被改变时,相关的权限点需

要重新授权。

6.2.2 组织结构

表 AORGLEVEL 存储了机构的上下级关系 字段“upperid”表示上级编号,字段“lowered”表示下级编号。

表 AGROUPLEVEL 存储了用户组的上下级关系 字段“upperid”表示上级编号,字段“lowered”表示下级编号。

60

Page 67: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

6.3 变量

在“系统管理”的“变量”模块,可以根据系统需要设置一些变量,程序中可通过

Variables(参见 javadoc)获取变量值,也可通过“变量表达式”表示变量值。 终用户可维护这些变量,开发人员应当为 终用户提供这些变量的维护手册,并要求管

理人员严格控制权限,避免变量的值被随意修改。

6.4 表达式

表达式用来表示动态参数,运行时刻被替换。 表达式的语法标志对大小写敏感,如$c{…}不被系统认为是表达式。

6.4.1 常量表达式 - $C{ }

功能:获取常量值 语法:

$C{常量名称} 规则:

常量名称 值 root 应用根路径 home Home 路径 date 当前日期 time 当前时间 datetime 当前日期时间 当设置了不存在的常量名称时,会抛出异常(UnsupportedOperationException)。

6.4.2 变量表达式 - $V{ }

功能:获取“系统管理”的“变量”模块中定义的变量值 语法:

$V{变量编号} $V{变量编号, 默认值}

规则:返回变量值。当指定的变量不存在时,返回默认值或空字符串。

6.4.3 用户表达式 - $U{ }

功能:获取当前用户属性 语法:

$U{用户表 AUSER 的字段名} 规则:返回用户属性。当指定的属性不存在时,返回空字符串。

6.4.4 Request 表达式 - $R{ }

功能:获取 Request 中指定参数的值 语法:

$R{Request 参数名} 规则:返回 Request 中指定参数的值。当指定的参数不存在时,返空 null。

6.4.5 Session 表达式 - $S{ }

功能:获取 Sessiont 中指定参数的值

61

Page 68: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

语法: $S{Sessiont 参数名}

规则:返回 Sessiont 中指定参数的值。当指定的参数不存在时,返空 null。

6.4.6 RequestSession 表达式 - $RS{ }

功能:从 Request 或 Session 中获取值 语法:

$RS{Request 参数名,Session 参数名} $RS{Request 参数名,Session 参数名, 默认值} “Request 参数名”和“Session 参数名”必填,“默认值”可选。

规则:如果 Request 中存在“Request 参数名”的值,返回此值;如果不存在,在

Session 中查找“Session 参数名”的值,不存在时返回默认值(默认值未指定时返

回空字符串); 终使用的值按“Session 参数名”存入 Session;

6.4.7 标签表达式 - $L{ }

功能:实现国际化,资源文件放置于{home}/i18n/下 语法:

$L{file-prefix:att,param0,param1,…} file-prefix:资源文件名前缀。必填参数 att:资源文件内的属性名称。必填参数 param:替换参数。可选参数。

规则: 定位资源文件:假设“file-prefix ”为“a”,访问者的“language”为“zh”、

“country”为“CN”,则使用资源文件 a_zh_CN.properties 获取资源文件内“att”属性的值,属性不存在时返回表达式;属性存在时,按顺

序使用 param0、param1…替换值中的{0}、{1}…标志,未指定参数的{x}标志将

被替换为空字符串,替换过的值被返回。

6.4.8 数据表达式 - $D{ }

在列表单元中使用较多,表单单元也可以使用 功能:动态获取单元(Unit)的数据(MapList)中指定的值 语法:

$D{单元数据中的键值} 一般为字段名

规则:返回 MapList 中指定的值。当指定的属性不存在时,返空字符串。

6.4.9 SQL 表达式 - $SQL[ ] / $SQL[[ ]]

只能用于单元和报表的“SQL”属性。

功能:将某些表达式条件设为一个集合,这些条件将被统一使用或不使用。 语法:$SQL[…], $SQL[[…]] 规则:[]或[[]]内可以嵌套 6 种表达式$C{}、$V{}、$U{}、$R{}、$S{}、$RS{},当嵌套

的表达式全部有值(包含空字符串),输出为[]或[[]]内的被替换过的字符串;当不是

全部有值时,如果使用的是$SQL[]则输出为空格,如果使用的是$SQL[[]]则输出为

“ and 1=2 ”。放置在 where 后面时,$SQL[]相当于可选条件,$SQL[[]]相当于必填

条件。

62

Page 69: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

要注意 SQL 表达式在任何情况下,都要保证整个 SQL 语句语法的正确性。 不赞成过多的使用 SQL 表达式,会使系统难以理解和维护

6.4.10 简单案例

使用$SQL[ ]作为条件: select * from T $SQL[ where a=$R{u.a} ] 当 Request 中存在“u.a”参数时(假设值为 6):select * from T where a=6 当 Request 中不存在“u.a”参数时:select * from T

使用$SQL[[ ]]作为条件: select * from T where 1=1 $SQL[[ and a=$R{u.a} ]] 当 Request 中存在“u.a”参数时(假设值为 6):select * from T where 1=1 and a=6 当 Request 中不存在“u.a”参数时:select * from T where 1=1 and 1=2

使用$SQL[ ]作为排序字段 SQL 语句:select * from T order by a $SQL[ , $R{b} ]

使用$SQL[ ]作为查询结果 SQL 语句:select a $SQL[ , $R{b} ] from T

6.4.11 表达式嵌套

上述 9 种表达式,排列在后的可以嵌套排在前面的表达式。嵌套只是语法上支持,一般情

况下没有应用意义。

6.5 展现风格

6.5.1 样式文件

样式文件相当于皮肤,控制了所有 HTML 对象默认的表现方式,默认的样式文件为

/common/skins/blue.css。某个域的所有页面会固定引用此样式文件,域的样式文件设定

在域配置文件(domain.xml)的<skin>节点。 当某个页面需要特殊样式时,可以在页面中引用一个自定义的 css 文件,该文件中重新定

义默认样式。如某个页面希望所有文本框的边框为红色: .E1{BORDER:red 1px solid; } 当希望某个域的所有页面改变风格时,应该新建一个样式文件,该文件中应包含所有

windows.css 中的定义,同时将相应 domain.xml 的样式文件指定为此文件。

63

Page 70: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

6.5.1.1 定义说明

元素 CSS 定义 使用对象 说明 E1 <input type=text> 文本域,控件模式 E1D <input type=text> 文本域,只读模式 E3 <select> 下拉列表,控件模式 E3D <select> 下拉列表,只读模式 E5 <input type=button> 表格区的按钮 E5B <input type=text> 操作区的按钮 E6 <input type=radio> 单选按钮 E7 <input type=checkbox> 多选按钮 E8 <textarea> 文本区域,控件模式 E8D <textarea> 文本区域,只读模式 E25 <input type=file> 文件 E44 <select multiple> 多选下拉列表,控件模式 E44D <select multiple> 多选下拉列表,只读模式

图文按钮 CSS 定义 使用对象 说明 B 按钮的外层对象 图文按钮的背景 BT 可以使用<span> 分隔竖线,凸起效果 BS 可以使用<span> 分隔竖线,凹陷效果 E41 <span> 图文按钮外层 E41T <span> 图文按钮的文本样式 E41S <span> 图片和文本的间距 E41N <span> 正常状态 E41O <span> 鼠标移上的状态 E41P <span> 鼠标按下的状态 E41D <span> 禁止状态 E41DT <span> 禁止状态的文本样式

64

Page 71: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

页面标题 CSS 定义 使用对象 说明 PH <td> 主标题 PS <td> 副标题

单元标题 CSS 定义 使用对象 说明 SW <img> 单元隐藏/显示图标 UT <td> 单元标题 UBAR <td> 操作区,被默认模板 unit.html 使用 TBAR <div> 操作区,被模板 unit.bar.html 使用 FBAR <div> 操作区,被模板 unit.fieldset.html 使用 UF <fieldset> 被模板 unit.fieldset.html 使用

边框 CSS 定义 使用对象 说明 UB <table> 单元 外层边框 TB <td> 标题行(操作区)边框 GB <table> 表格区边框 DB <table> 表格区背景色 RB <tr> 数据行背景色

列表标题 CSS 定义 使用对象 说明 H <thead> 列表标题,无边框 HB <thead> 列表标题,有边框

对齐方式/间距(可供列配置使用) CSS 定义 使用对象 说明 L <colgroup> 左对齐 R <colgroup> 右对齐 C <colgroup> 中对齐 LC <colgroup> 左对齐,同时控制间距 RC <colgroup> 右对齐,同时控制间距 CC <colgroup> 中对齐,同时控制间距

必填 CSS 定义 使用对象 说明 ER <span> 必填元素标志,即“*”的样式

布局方式 - 分组 CSS 定义 使用对象 说明 GV <tr> 纵向分组标题行 GVH <tr> 纵向可隐藏分组标题行 GHT <td> 横向分组标题 GHW <td> 横向分组外层 GHC <td> 横向分组内层 GDT <td> 双列分组标题 GDW <td> 双列分组外层 GDC <td> 双列分组内层

65

Page 72: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

布局方式 - 集合

CSS 定义 使用对象 说明 FV <fieldset>的上级<tr> 纵向集合 FH <fieldset>的上级<tr> 横向集合

布局方式 - 卡片 CSS 定义 使用对象 说明 CA <table> 卡片外层 CG <td> 卡片内层 CT <table> 卡片标题区 C0 <div> 卡片标题项,未选中 C1 <div> 卡片标题项,选中 CS0 <div> 分隔区,起始位置 CS <div> 分隔区,中间位置 CSX <td> 分隔区,结束位置

列表的选择列 CSS 定义 使用对象 说明 SR <input type=radio> 单选 SC <input type=checkbox> 多选

列表的分页导航栏 CSS 定义 使用对象 说明 N <td> 分页栏 外层<td> NT <span> 文本样式 NC <span> 指定页号区域外层 NN <input type=text> 指定页号区域的文本域(页号) NG <input type=button> 指定页号区域的按钮(go) NE <span> 激活项 ND <span> 禁用项 NS <select> 下拉导航的下拉列表

列表的行样式 CSS 定义 使用对象 说明 RI <tr> 动态插入行的样式 RO <tr> 鼠标移上的样式 RS <tr> 鼠标点击的样式 R1 <tr> 样式 1(可用于列表的交替行样式) R2 <tr> 样式 2(可用于列表的交替行样式) R3 <tr> 样式 3(可用于列表的交替行样式)

系统消息(成功消息/失败消息) CSS 定义 使用对象 说明 M <td> 消息区的 外层<td> MS <div> 系统消息 MI <div> 成功消息 ME <div> 失败消失

跟踪器统计信息

66

Page 73: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

CSS 定义 使用对象 说明 T <table> 区域 外层<table> TH <tr> 标题行 TS <tr> 统计行

6.5.2 模板

模板用于页面和单元,用来组合“局部内容”,“局部内容”可任意布局以满足不同形式

的表现要求。同一个单元在使用不同的模本文件时,可以有不同的展现效果。 一个单元或页面如果需要较多的美工修饰或添加其他静态内容,应当使用自定义模板。自

定义模板可以在默认模板的基础上添加任意的静态内容,运行时刻会原样输出。

默认模板: 页面模板:{home}/template/page.html 单元模板:{home}/template/unit.html 框架模板:{home}/template/ frameset.html

6.5.2.1 实现原理

模板文件: 变量:代表了一个属性或页面中的局部内容 集合:集合内的若干变量和静态代码是一个整体,主要用来处理当变量全为空

时,使整个区域不占位置

数据 Map 对象,包含了变量的值,运行期间模板中的变量被替换为 Map 中的值。

6.5.2.2 变量

语法:${变量名}。注意:变量名不能是数字、不能包含逗号“,”; 替换规则:变量为空时,变量的位置将被空字符串替代,否则替换为变量值。

模板中可以自定义变量,设置自定义变量的值的方式: 页面模板:PI 中通过 Page.getAttributes()获取一个 Map 对象,以变量名为键设置值; 单元模板:UI 中通过 Unit.getAttributes()获取一个 Map 对象,以变量名为键设置值。 注意:如果设置了系统变量的值,该值不会被使用。

6.5.2.3 单元引用

仅页面模板支持单元引用。 语法:${域名,单元编号},例如“${app,top}”; 替换规则:替换为指定单元的 HTML 代码;指定单元无访问权限或不存在时替换为空

字符串。 被引用的单元显示模式默认为“查看”,可接受 Request 参数指定其显示模式;该单元仍

然受权限控制。

6.5.2.4 集合

语法:<c>…</c>,不能嵌套;

67

Page 74: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

替换规则:集合之间的变量都为空时,整个区域将被空字符串替代;否则,替换解析

内容。 举例说明集合替换规则: 模板内容

<table> <c><tr><td>{x}{y}</td></tr></c> <tr><td></td></tr> </table>

x=a,y=b <table> <tr><td>ab</td></tr> <tr><td></td></tr> </table>

x=a,y 为空 <table> <tr><td>a</td></tr> <tr><td></td></tr> </table>

解析结果

x 为空,y 为空 <table> <tr><td></td></tr> </table>

6.5.2.5 系统使用的变量

page.html window-title 浏览器标题 head head 属性 skin 样式文件路径 include-css css 引用 include-js-first 前 JS 引用 body-attribute body 属性 heading 主标题 subheading 副标题 message 系统消息 unit 单元解析结果 debug 跟踪内容 include-js-last 后 JS 引用

unit.html unit-attribute 单元属性 title-border 操作区边框设置 title 单元标题 toolbar 操作区元素 grid-attribute 表格区属性 grid 表格区内容 navigator 列表单元的分页导航 content 单元内容

系统变量的位置示意图

68

Page 75: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

6.5.2.6 定制模板举例

增加、修改模板:如,直接定义 body 的 margin 样式、在页面底部加入固定文字等 调整变量或集合的位置:如页面标题和副标题 拆分集合:如,将单元的操作区拆分为标题和工具栏

6.6 数据库相关

6.6.1 日期格式

日期格式:yyyy-MM-dd 时间格式:HH:mm:ss 时间戳格式:yyyy-MM-dd HH:mm:ss.SSS

某些数据库没有日期和时间格式的字段类型(如 Oracle、SQL Server 等),使用这些数

据库时,对于需要显示为日期或时间格式的元素,应将元素的系统验证器设为日期或时

间,系统会自动调整格式。

6.6.2 WebLogic 下使用 Oracle 的说明

应使用 oracle 自带的 JDBC 驱动 classes12.jar。 对于 WebLogic 的某些版本,使用了 ojdbc14.jar(位于\weblogic81\server\lib\),此包影

响兼容性,将其删除,否则将被优先使用。

6.7 日历

对日期时间型元素可以使用日历控件,步骤如下:

69

Page 76: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

步骤一、引用 js 日历控件:

元素所属“页面单元”的“前 js 引入”加入 js 引用: /common/datepicker/WdatePicker.js

步骤二、元素触发设置: 可以在元素的“定制”属性中设置点击触发: onClick='WdatePicker()' 或在“后缀”属性中设置图片点击触发: <img onclick=WdatePicker({el:$dp.$('xxx')}) src='/common/datepicker/skin/datePicker.gif' width='16' height='22' align='absmiddle'> 其中,xxx 替换为“单元编号+.+元素编号”,例如单元编号为 a、元素编号为 b,则替换

为 a.b。

6.8 国际化

通过使用标签表达式来引用资源文件的内容实现了国际化。 资源文件位于{home}/i18n/下。使用 xxx_temp.properties 编辑中文资源内容,修改后需要

执行 ascii.bat 将其转为 ascii 格式。

6.9 版本控制

所有类型的组件都可以通过“版本导出”存为 xml 文件,通过“版本导入”可以将这些

xml 文件恢复为组件。

版本控制的用途: 协同开发:开发人员可以在不同的服务器下工作,通过版本控制将所有组件汇集

到同一台服务器; 备份和恢复:保存历史版本,必要时将其恢复; 持续积累:将可以再利用的组件导入资源库,避免今后重复开发。

操作方法:

在“组件”上点击鼠标右键,选择“版本导出”或“版本导入”:

6.9.1 版本导出

导出文件放置

在同一路径下 导出文件按

对象放置在

不同路径下 选择组件类型

70

Page 77: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

“组”不参与导出,仅用来实现全选/全不选。

版本号 版本号即导出的 xml 文件所属的文件夹名称,命名规则为“当前时间+当前用户编号”。

“按对象设置路径”导出多个组件时,xml 文件被存储于多个路径下,这些 xml 文件所属

的文件夹名称即版本号相同。

导出的版本文件存放位置: 按批次号设置路径:{home}/version/batch/版本号/ 按对象设置路径:{home}/version/域/组件类型/组件编号/版本号/

6.9.2 版本导入

导入操作会将选定文件夹下的所有 xml 文件恢复为组件加入当前域; 导入操作不会自动删除已存在的相同编号的组件,因此,当需要覆盖已存在的组件

时,应先删除组件再执行导入操作; 导入过程中如果发现组件已存在,或发生其他异常,全部操作会回滚; 导入后需重启 WEB 服务器,导入的组件才会被识别。

6.9.3 版本查看

将组件的版本文件导入到 test 域,在 test 域中查看。

7 API 简介

7.1 Java

详细说明请参考 javadoc 文档。

7.1.1 常用对象

MapList 平台唯一使用的数据集合对象,是单元、枚举和统计图的数据载体。

ActionContext 封装了 Request、Session 等对象,Action 或拦截器通过此对象获取相关数据。

ActionResult 包含了 Action 的执行结果,用来控制流转。

Unit 对应为单元组件,可通过单元拦截器来控制 Unit。

Element 对应为元素组件,可通过单元拦截器来控制 Element。

71

Page 78: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

7.1.2 数据访问

DB 获取数据库连接、执行数据库操作。

DBFactory 用来获取 DB 对象。

7.1.3 常用接口

Action 用于执行业务逻辑。

UnitInterceptor 用于拦截 Unit。

MapListFactory 用于获取 MapList 数据对象。

Validator 验证器,实现数据验证。

7.1.4 已实现的接口

DefaultAction Action 元素未指定 Action 类时,此类为默认值,执行命令行逻辑。

QueryAction 执行查询。

ClearAction 清除 Action 元素所属单元的缓存数据(查询单元和启用了“记忆”的单元的数据会被系统

缓存),常用于查询的“重置”(恢复初始条件)。

DownloadAction 下载处理类。

Unit2ExcelAction 单元数据转 Excel 文件,导出对应列表的本页数据。

Unit2ExcelAllAction 单元数据转 Excel 文件,导出对应列表的全部页数据。

ListStatUI 三维统计列表及统计图。

7.2 JavaScript

7.2.1 fastunit.js

7.2.1.1 基本动作

doSubmit 功能 提交到另一个视图或执行 Action,未指定 URL 时提交到自身。

72

Page 79: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

语法 doSubmit(url) 参数 url 视图 URL“/domain/unitid.do”,或 Action URL

“/domain/unitid/elementid.do” 返回 无 示例 doSubmit(‘app/index.do’)

doLink 功能 转向到另一个视图。 语法 doLink(url) 参数 url 视图 URL“/domain/unitid.do” 返回 无 示例 doLink(‘app/index.do’)

doListDelete 功能 删除列表单元中选中的数据(执行数据库删除)。 语法 doListDelete(url,unitId)

url Action URL“/domain/unitid/elementid.do” 参数 unitId 列表单元的单元编号

返回 无 示例 doListDelete(‘app/customer.list/delete.do’,’customer.list’)

doFormDelete 功能 删除表单单元显示的一条数据(执行数据库删除),多条数据时不执行。 语法 doFormDelete(url,unitId)

url Action URL“/domain/unitid/elementid.do” 参数 unitId 表单单元的单元编号

返回 无 示例 doFormDelete(‘app/customer.form/delete.do’,’customer.form’)

doListAdd 功能 列表单元动态增加一条数据(不执行数据库操作) 语法 doListAdd(unitId) 参数 unitId 列表单元的单元编号 返回 无 示例 doListAdd(’customer.list’)

doFormAdd 功能 表单单元动态增加一条数据(不执行数据库操作) 语法 doFormAdd(unitId) 参数 unitId 表单单元的单元编号 返回 无 示例 doFormAdd(’customer.form’)

doRemove 功能 删除列表单元或表单单元选中的数据(不执行数据库操作) 语法 doRemove(unitId) 参数 unitId 单元编号 返回 无 示例 doRemove(’customer.list’)

73

Page 80: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

7.2.1.2 对象选择

$fUnit 功能 获取指定单元的 外层<table>对象(DOM element node) 语法 $fUnit(unitId) 参数 unitId 单元编号 返回 <table>对象 示例 $fUnit(’customer.list’)

$fGrid 功能 获取指定单元的数据区<table>对象(DOM element node) 语法 $fGrid(unitId) 参数 unitId 单元编号 返回 <table>对象 示例 $fGrid(’customer.list’)

7.2.2 tree.js

7.2.2.1 手动创建树

效果:

JavaScrip 代码: var demo = new Tree('root','Root'); var a = demo.add(new Tree('1','1')); var b = a.add(new Tree('1.1','1.1')); b.add(new Tree('1.1.1','执行方法',functionTest)); b.add(new Tree('1.1.2','链接','demo.html')); var c = a.add(new Tree('1.2','1.2')); c.add(new Tree('1.2.1','1.2.1')); c.add(new Tree('1.2.2','1.2.2')).add(new Tree('1.2.2.1','1.2.2.1')); c.add(new Tree('1.2.3','1.2.3')); demo.writeTree();

7.2.2.2 手动创建右键菜单

效果:

JavaScrip 代码:

74

Page 81: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

function copyFunction (){ alert("copy!"); } function deleteFunction (){ alert("delete!"); } var menu = new Tree('root','root'); menu.add(new Tree('m1','关联','/dev/xxx.do','/domain/dev/t/link.png')); menu.add(new MenuSeparator()); menu.add(new Tree('m2','复制',copyFunction,'/common/images/tool/copy.png')); menu.add(new Tree('m9','删除',deleteFunction,'/common/images/tool/delete.png')); function showMenu(event){ menu.writeMenu(); event.returnValue = false; } HTML 触发代码: oncontextmenu=showMenu(event)

8 案例分析 本章将针对第二章“快速开始”中提到的两个案例,详细解析平台运行的一些原理。 关于更多功能的示例,参见演示中心。

8.1 客户管理

为方便后面的讨论,我们先新增如下两条数据:

8.1.1 进入表单页面的途径

列表单元中的 3 个元素设置了进入表单页面的链接:

new(新增) 元素的“定制”属性为: onclick=doLink('/test/customer.form.do?m=a') common.js 中定义的 doLink 方法将执行如下语句: window.location='/test/customer.form.do?m=a' 因此,新增按钮的点击事件只是将页面转入表单,要特别注意“m=a”参数是必须的。 “new”元素在运行期间产生的 HTML 代码如下: <input type=button name=customer.list.new onclick=doLink('/test/customer.form.do?m=a') class=E5B value="新增"> 分析一下代码中应用的规则:

按钮元素对应的 HTML 对象为“<input type=button>”; name 属性的规则为:单元编号+”.”+元素编号; “定制”属性被放置于元素所属的 HTML 对象内; 按钮元素的“CSS”属性未设置时,使用默认定义“E5B”;

scan(查看)

75

Page 82: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

元素的“链接”属性为: /test/customer.form.do?m=s&customer.form.customerid=$D{customerid} 运行期间产生的第一行 HTML 代码如下: <a href="/test/customer.form.do?m=s&customer.form.customerid=001">查看</a> 第二行代码: <a href="/test/customer.form.do?m=s&customer.form.customerid=002">查看</a> 代码分析:数据表达式在运行期间被替换为元素“customerid”的值。

eidt(修改) 与 scan(查看)类似,区别在于参数“m=e”。

8.1.2 显示模式的应用

单元显示模式决定元素显示模式 上一节提到的 3 个 URL 中分别指定为“m”参数,在单元显示模式的说明中,我们知道

“m” 参数用于设置全局单元显示模式,由此决定了页面显示效果不同,以“客户编号”

元素为例分析其中的过程: URL 参数 单元显示模式 元素显示模式 m=s 查看 使用用有权模式“查看”的设置“文本” m=e 修改 使用用有权模式“修改”的设置“控件” m=a 新增 使用用有权模式“新增”的设置“控件” 还可以发现,以查看模式进入表单时,“保存”按钮并未出现,原因在于“保存”元素有

权模式的“查看”列设为了“移除”,因此单元模式为“查看”该元素不被使用。

单元在“新增”显示模式下不装载数据 点击“新增”按钮进入表单时,没有执行数据库查询,各元素的值为空。

单元显示模式决定了数据库操作 在表单的保存过程中,系统会自动检测到单元显示模式,因此,使用参数“m=a”时,会

执行 insert 操作,使用参数“m=e”时,会执行 update 操作。

8.1.3 表单单元数据的获取

数据模式为“SQL”,依据如下 SQL 语句获取单元数据: select * from CUSTOMER where 1=1 $SQL[[ and customerid = '$RS{customer.form.customerid,test.customer.form.customerid}']]

RS 表达式含义 从 Request 中查找“customer.form.customerid”参数,如果存在则使用此参数值,并以

参数名“test.customer.form.customerid”存储到 Session 中,如果 Request 中没有值,

直接从 Session 中获取。

SQL 表达式含义 指定了一组必填条件,当 RS 表达式有值时,替换为“ and customerid =值”,RS 表达式

没有值时,替换为“ and 1=2”。

8.1.4 保存功能分析

触发 “save”元素在运行期间产生的 HTML 代码为:

76

Page 83: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

<input type=button name=customer.form.save onclick= doSubmit('/test/customer.form/save.do') class=E5B value="保存">

“save”元素的基本卡片的“定制”属性未设,系统自动设置 doSubmit 方法; doSubmit 方法定义在 common.js 中,功能是将表单提交到指定的 URL;

验证

“save”元素的“验证单元”属性设置了“customer.form”,单元“customer.form”的

元素“customid”设置为“必填”,其他元素没有指定验证属性,因此,验证过程中将检

验“customid”是否为空。未通过验证时不执行后续流程,Action 被设为失败,页面中会

显示验证失败的原因。

执行 “save”元素的“Action”属性未指定 Action 类,将使用默认的 DefaultAction 执行“命

令行”逻辑,“命令行”的设置为“CUSTOMER,customer.form;”,表示依据单元

“customer.form”的数据对表“CUSTOMER”执行操作,系统会自动根据单元显示模式

来执行新增或修改操作。

流转 “save”元素的“成功转向”和“失败转向”都设置为

“/test/customer.form.do?m=e”,无论 Action 执行是否成功,都返回原页面,并使用修

改显示模式(m=e)。 当不指定“m=e”时,系统会使用上一次访问此单元的显示模式,因此,对于修改操作没

有区别,对于新增操作保存后则会使用新增模式。

8.1.5 删除功能分析

触发 “delete”元素的定制属性如下: onclick=doListDelete('/test/customer.list/delete.do','customer.list') doListDelete 方法定义在 common.js 中,标记单元 “customer.list”中需要删除的行,并

将表单提交至 Action“/test/customer.list/delete.do”。

执行 “delete”元素的“命令行”属性如下: CUSTOMER,customer.list 默认的 DefaultAction 将依据单元“customer.list”的数据,执行表“CUSTOMER”的删

除操作。

8.2 用户登录

本节通过一些调整来引入其他功能。

8.2.1 应用模板

原来的登录单元显示在页面的左上角,可通过定制页面模板来调整显示位置,步骤如下: 1. 创建模板 进入{home}/ template/目录下,创建一个 html 文件命名为“page.test.html”,并将默认的

页面模板文件“page.html”的内容拷贝至此文件,将<form>之间的部分修改如下: <form method="post"> <div style="height:100px;">&nbsp;</div> <c><div class=M align=center>${message}</div></c>

77

Page 84: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

<div align=center>${unit}</div> </form> 模板的要点:只要保留系统模板变量,可任意改造模板内容。 2. 使用模板 将单元“login”的“页面模板”设为“page.test.html”。

8.2.2 应用元素显示模式

登录页面的访问 URL 为“http://localhost:8080/test/login.do?m=e”,如果不指定

“m=e”参数,单元显示模式为“查看”,“用户名”和“密码”元素将使用“文本”方

式显示,可以将这两个元素的“有权模式”的“查看”列设为“控件”,这样,URL 中就

可以不必使用“m=e”参数了。

9 应用定制

9.1 切换应用数据库

系统默认使用 HSQLDB 作为应用数据库,正式开发前,按如下步骤切换应用数据库: 1. 安装数据库服务器并创建一个新的数据库 注意编码方式一般选择 UTF-8,否则可能会有中文问题。 2. 执行脚本创建系统使用的表 在{home}/setup/下选择相应数据库的脚本文件,执行其中的所有语句。 (注:对于 Oracle,脚本中包含了一个触发器,需要在 SQL Plus 下执行才能正常创建) 3. 修改数据源配置文件{home}/datasource/app.xml 以 MySQL 为例,使用 Driver 方式的配置为: <?xml version="1.0" encoding="UTF-8"?> <database name="mysql">

<driver> <class>com.mysql.jdbc.Driver</class> <url>jdbc:mysql://localhost/app</url> <username>root</username> <password>root</password>

</driver> </database> 参见“系统配置”的“数据源配置”部分。

9.2 重新定义用户表

项目应用中,通常需要增加用户属性,可按如下步骤重新定义用户表 AUSER: 1. 设计新的用户表 可以任意添加字段。必须保留系统使用的 7 个字段:userid、username、usertype、administratorid、organizationid、password、enabled,其他 4 个字段可以删除:

creator、createtime、modifier、modifytime。 (注:新增加的字段同样可以被用户表达式引用,可供数据权限使用) 2. 重新创建 AUSER 表 执行“drop table AUSER”删除原来的表;执行“create table AUSER…”创建新的表。

78

Page 85: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

3. 导入超级用户数据 执行{home}/setup/xxx.sql 脚本文件中的“insert into AUSER …”这一行,导入用户

“admin”。 4. 修改表组件 进入开发控制台,修改表“AUSER”,新增或删除字段,与新表一致。 5. 修改单元组件 进入开发控制台,修改单元“user.query”、“user.list”、“user.form”,新增或删除元

素,与新表一致。

9.3 app 域的说明

app 域的组件可以被改动,除了调整用户表结构和页面展现外,其他逻辑如 Action 等改动

时需要谨慎。

9.3.1 单元组“admin”

不能修改单元组编号“admin”。 此单元组下的单元及所属 Action 不会作为权限点出现,超级用户或管理员用户直接拥有权

限,普通用户无法访问。

9.3.2 设置新增用户的初始密码

在单元“app/user.form”中设置隐藏元素“password”的默认值。

9.3.3 数据权限“user”说明

此数据权限设置在“user.list”和“user.form”单元,系统使用,不能被修改。

9.3.4 登录页面

对应为单元“login”。可以自行修改,也可以开发一个新的登录页面。

登录后的控制 选中“隐藏浏览器工具栏”时,登录后将屏蔽浏览器的工具栏。 如果不希望用户选择,可将 clean 元素变为隐藏域并设默认值为 0 或 1。 相关的 js 文件为:\fastunit\domain\app\login.js。

不要设为需要授权 否则,除了不受限制的超级用户外,其他所有用户将无法访问登录页面。

9.3.5 访问失败页面

对应为单元“accessfailed”,权限检查未通过时显示此页面。

9.4 Web 服务器 URI 编码设置

当 url 参数中包含中文时,可能会造成无法读取参数值,此时应当改变 URI 编码。 以 Tomcat 为例,URI 默认编码为 ISO-8859-1,应改为 GBK,修改方法为:打开

/tomcat/conf/server.xml,在第一个<Connector>内加入:URIEncoding="GBK"

79

Page 86: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

例如: <Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="GBK" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />

10 系统配置

10.1 数据源配置

数据源配置文件是一个 xml 文件,放置在{home}/datasource/下,引用数据源时使用文件

名称(不包含后缀“.xml”)。 注: 1、 {home}/datasource/下 app(xxx).xml 为各种数据库的样例配置(driver 方式); 2、 /fastunit/WEB-INF/lib/下默认包含了常见数据库的 JDBC 驱动 jar 文件,当版本不一致

时可能需要替换。

10.1.1 配置详解

(黑体表示必填项) 节点 说明 <database> name 属性指定了数据库实体,可选项为:Oracle、

DB2、DB2400、SQLServer、Sybase、MySQL、PostgreSQL、Informix、HSQL 等,不区分大小写

<class> 驱动类 <url> 数据库 URL <username> 用户名 <password> 密码 <isolation> 隔离级别,可选项为:

0(NONE) 1(READ_UNCOMMITTED) 2(READ_COMMITTED) 4(REPEATABLE_READ) 8(SERIALIZABLE) 为空时,使用数据库自己的设置,大部分数据库默认

使用的隔离级别为 2

<driver> 驱动类连接方

式。 此方式使用

JDBC 事务模

式,数据库连

接将被设为自

动提交(AutoCommit)

<parameter> 连接的附加参数,有多个参数时可以设置多个

<parameter>节点 <jndi-name> jndi 名称 <jndi-class> jndi 类 <jndi-url> jndi URL <username> 用户名 <password> 密码 <parameter> 连接的附加参数,有多个参数时可以设置多个

<parameter>节点

<datasource> 数据源(连接

池)方式

<transaction> name 的可选值为:JDBC(默认值)、NULL(不处

理事务,此时应配置容器管理事务)、JTA(WebLogic、Websphere、JBoss、 Resin 等),

name 设为 JTA 模式时可以通过 jta-user-transaction定制 UserTransaction;默认使用 JDBC 事务。

80

Page 87: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

<fetch-size> 正整数,设置 JDBC 一次性获取的数据量,默认值为

0(不限制) <batch-size> 正整数,设置 JDBC2 的批处理大小,默认值 15 <scrollable> true 或 false,是否支持 JDBC2 的可滚动结果集。默

认值为 true

连接方式 <driver>和<datasource>配置只会使用其中一个,如果<datasource>的<jndi-name>不为

空,使用 datasource 方式连接,否则使用 driver 方式连接

案例 _template.xml 是一个模板文件,以 DB2 数据库为例,使用 Driver 方式的配置为: <?xml version="1.0" encoding="UTF-8"?> <database name="db2">

<driver> <class>COM.ibm.db2.jdbc.net.DB2Driver</class> <url>jdbc:db2://localhost/APP</url> <username>db2admin</username> <password>db2</password>

</driver> </database> 使用连接池方式的配置为: <?xml version="1.0" encoding="UTF-8"?> <database name="db2">

<datasource> <jndi-name>jdbc/db2pool</jndi-name> <jndi-class>weblogic.jndi.WLInitialContextFactory</jndi-class>

</datasource> </database>

10.1.2 Tomcat 连接池配置

第一步、拷贝数据库 JDBC 驱动 jar 文件放到 Tomcat 下: 对于 Tomcat4/Tomcat5,放到{tomcat}/common/lib/下;对于 Tomcat6,放到{tomcat}/lib/下。

第二步、Tomcat 连接池配置: 修改 2.2 节“部署应用”中的 xml 文件,设置参数时,driverClassName、url、username、password 的值根据实际情况设定。本例将 jndi 名称设为“dstest”。 对于 Tomcat4: <Context path="" docBase="D:/fastunit" privileged="true"> <Resource name="dstest" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="dstest"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>maxActive</name> <value>100</value> </parameter> <parameter> <name>maxIdle</name> <value>30</value> </parameter>

81

Page 88: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

<parameter> <name>maxWait</name> <value>10000</value> </parameter> <parameter> <name>username</name> <value>app</value> </parameter> <parameter> <name>password</name> <value>app</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value> </parameter> </ResourceParams> </Context> 对于 Tomcat5/Tomcat6: <Context path="" docBase="D:/fastunit" privileged="true"> <Resource name="dstest" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="app" password="app" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> </Context>

第三步、FastUnit 数据源配置文件设置: 对于 tomcat4、5、6,数据源配置文件是一样的: <?xml version="1.0" encoding="UTF-8"?> <database name="oracle"> <datasource>

<jndi-name>java:comp/env/dstest</jndi-name> </datasource>

</database> 其中,“dstest”对应为<Resource>节点的“name”属性值。

10.2 全局配置

配置文件为{home}/global.xml,配置详解: 节点 说明 <root> 使用根路径的域,访问此域的页面时 URL 前不必加域

符号。即,可以用“/unitid.do”替代

“/domain/unitid.do”来访问,默认为 app。 <domains> 可访问的域,未在此处列出的域任何人无法访问。系

统上线前应去掉 dev、lib、demo、test 等与应用系统

无关的域。 <cache-provider> 缓存方案。可选项为:

MapCache:用于普通应用,效率较高 SwarmCache:支持集群

82

Page 89: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

<language> 默认语言代码 <country> 默认国家代码

<i18n>

<encoding> 默认字符集 <flash> Flash 设置

10.3 域配置

包含 domain.xml 和 interceptors.xml 两个配置文件,控制范围是域。 {home}/domain/下的配置文件是所有域的默认配置,不能被修改。 {home}/domain/xxx/下的配置文件是域“xxx”的专用配置,可以被修改,配置文件中

未指定的项使用默认配置。

10.3.1 domain.xml

配置详解: 节点 说明 <index-url> 当一个 Action 未指定转向的 URL,并且系统不

能自动获取转向 URL 时,使用此设置 <datasource> 默认数据源

<skin> 默认样式文件 <frameset-template> 默认框架模板 <page-template> 默认页面模板

<style>

<unit-template> 默认单元模板 <default-proxy> 默认的 Proxy 实现类 <action> <default-action> 默认的 Action 实现类 <prefix> 所有页面的浏览器标题附加此前缀 <window-title> <suffix> 所有页面的浏览器标题附加此后缀 <mark> 是否标记验证失败的元素,true 或 false <border-color> 标记元素的边框颜色

<validation>

<background-color> 标记元素的背景色颜色 <default-size> 列表单元默认的每页行数 <pages-max> 页码方式分页导航可以显示的页码数量

<list>

<rows-config> 列表单元默认的行配置

10.3.2 interceptors.xml

配置说明: <action>节点内设置 Action 拦截器; <page>节点内设置页面拦截器; <unit>节点内设置单元拦截器; 拦截器将按顺序执行,原有拦截器的顺序不能改变。

系统拦截器说明:

拦截器 实现的接口 功能 是否可删除 ACI ActionInterceptor

PageInterceptor UnitInterceptor

权限检查,包括 Action、页

面和元素 否

TokenAI ActionInterceptor 令牌校验 是 UserLogInterceptor ActionInterceptor

PageInterceptor 记录用户日志,包括 Action执行和页面访问

ValidationAI ActionInterceptor 表单校验 否

83

Page 90: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

LoadTablesAI ActionInterceptor 依据 Action 命令行,将表单

数据转换为 Table 对象集合 否

11 开发设置

11.1 系统信息

显示服务器运行环境的相关参数。

11.2 应用设置

系统控制 限制超级用户权限 不受限制的超级用户拥有所有权限;受限制的超级用户具有用

户、机构、管理员、用户组、角色管理的特权,同时仍然可以为

自己做任何授权。 日志队列大小 系统记录的日志信息先存储于缓存的日志队列中,达到此处设置

的大小时,将会批量更新至数据库。 调试控制 启用跟踪器 启用后,系统自动跟踪视图和 Action 的进程,跟踪结果显示于页

面下方,只有未发布的页面才会显示跟踪结果。 启用计时器 启用后,断点之间的计时信息以日志方式输出,可通过调用

DebugUtil.time()方法设置断点。 资源控制 每次装载语言文件 启用后不缓存语言文件。 每次装载模板文件 启用后不缓存模板文件。 注:“启用跟踪器”、“启用计时器”、“每次装载语言文件”、“每次装载模板文

件”,这几项会消耗一定的系统资源及减慢系统响应时间,因此仅限于在开发期间启用,

系统上线前应禁用。

11.3 组件设置

开发控制台 自动保存版本 所有组件每次保存时,自动记录此组件的版本文件。 组件树标签显示方式 组件名称的默认显示方式。

11.4 向导设置

使用向导创建新的单元时,以下属性的内容将设置在新增单元中: 表单单元 列数 对应了“元素-列数”属性。 列配置 对应了“单元-样式-列配置”属性。 显示单元边框 对应了“单元-样式-单元边框”属性。 显示操作区边框 对应了“单元-样式-操作区边框”属性。 显示表格区边框 对应了“单元-样式-表格区边框”属性。 显示 TD 边框 对应了“单元-样式-TD 边框”属性。 列表单元 显示单元边框 对应了“单元-样式-单元边框”属性。 显示操作区边框 对应了“单元-样式-操作区边框”属性。 显示表格区边框 对应了“单元-样式-表格区边框”属性。 显示 TD 边框 对应了“单元-样式-TD 边框”属性。

84

Page 91: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

查询单元 列数 对应了“元素-列数”属性。 列配置 对应了“单元-样式-列配置”属性。 显示单元边框 对应了“单元-样式-单元边框”属性。 显示操作区边框 对应了“单元-样式-操作区边框”属性。 显示表格区边框 对应了“单元-样式-表格区边框”属性。 显示 TD 边框 对应了“单元-样式-TD 边框”属性。

11.5 创建域

成功创建域、重启 WEB 服务器后,可以在“组件管理”中管理新创建的域。

12 附录

12.1 协同开发

12.1.1 集中开发

所有开发人员连接同一台服务器,此模式为推荐模式。 优点:开发成果随时都是 新的;系统规则实时约束所有开发人员,如组件编号。 缺点:通常要求开发人员在同一地点,以连接相同的服务器。

12.1.2 分布式开发

开发人员可各自搭建 FastUnit 环境,独立开发自己负责的模块,完成后通过组件移植同步

到统一的服务器。此模式通常需要人为制订某些规范,并明确各自的责任。 优点:开发人员可以灵活的分散开发;独立模块不受干扰。 缺点:当依赖于其他开发人员负责的模块时,无法及时获取其 新成果;不同开发人

员之间的组件编号命名需要人为制订规则以避免重复;组件移植会带来一些繁琐操

作,如有失误也可能会带来一些问题,如:同步时某些组件遗漏、多人分别更新同一

组件。

12.2 调试工具

查错方法:查看日志文件中提示及异常信息; 调优方法:启用跟踪器或计时器,用来观察资源消耗,确认系统瓶颈后采取相应措施。

85

Page 92: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

12.2.1 跟踪器

用来跟踪视图和 Action 执行过程中资源消耗情况,跟踪结果显示于页面下方(已发布的页

面不会显示)。效果图:

需要在管理控制台的应用设置中启用“跟踪器”后才会生效。 可以在程序中任意位置添加断点: DebugUtil.track(断点描述); 断点的信息会出现在跟踪结果中。

数据项解释: process view 表示视图请求,action 表示 Action 请求 title 断点描述 time 耗时 conn 创建数据库连接次数 query 执行数据库查询的次数 insert 执行数据库新增的次数 update 执行数据库修改的次数 delete 执行数据库删除的次数 memory 虚拟机使用的内存(=虚拟机占用总内存-虚拟机空闲内存) memory+ 虚拟机增量内存 注:

黑体字表示汇总数据; 由于内存增减和垃圾回收是时刻动态变化的,并不仅仅被当前进程影响,因此内

存数值可能不够精确,在单独操作的情况下数据会较准确。

系统设置的断点: 断点描述 此断点之前执行的操作 create action objects 创建 Action 对象 AI … Action 拦截器 do action 执行 Action create view objects 创建视图对象 PI … 页面拦截器 UI … 单元拦截器 write unit 单元对象输出为 html 代码

12.2.2 计时器

需要在管理控制台的应用设置中启用“计时器”后才会生效。用来输出断点之间的时间

差,单位为毫秒。计时器的结果以 log 方式输出,可以在日志文件中查看。

86

Page 93: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

可以在程序中任意位置添加断点: DebugUtil.time(断点描述);

12.3 开发规范

以下开发规范仅供参考: 单元编号和元素编号尽量短,可以降低 HTML 代码量、提高响应速度; 尽量使各组件结构简单,过于复杂会使系统难以理解; 避免设置不必要的属性; 尽量使用 CSS 样式定义取代高度、宽度、对齐方式、间距等属性。

12.4 关于资源中心

用于积累平时的开发成果,在遇到类似功能时可以直接调出使用。资源中心对应了“lib”域,可以通过开发控制台整理导入的资源。 使用方法:通过版本控制工具,将需要积累的表、单元、枚举等导入到“lib”域,在需要

的时候将资源导出。

12.5 Linux 下使用报表和统计图的注意事项

在不启用 X 的情况下,统计图或报表可能无法正常显示:

12.5.1 显示问题的解决

设置Java启动参数“ -Djava.awt.headless=true”。 以 Tomcat 为例: set CATALINA_OPTS="-Djava.awt.headless=true" export CATALINA_OPTS

12.5.2 中文问题的解决

使 Java 运行环境能调用到系统的汉字字体。 以 Redhat AS3 为例: 1. 进入 JRE 的字体设置目录 cd jdk 目录/jre/lib 2. 备份原来的 font.properties mv font.properties font.properties.original 3. 为 JRE 挑选一个合适的支持中文的字体配置文件 cp font.properties.zh_CN.Redhat font.properties 如何挑选合适的字体系统:在字体目录下查看系统提供的汉字 ttf 文件,然后找到引用此文

件的相应的 font.properties。本例为 font.properties.zh_CN.Redhat,使用的字体文件是

/usr/share/fonts/zh_CN/TrueType/zysong.ttf。

12.6 iReport 简介

本章以 iReport2.0.2 为例简单介绍如何使用 iReport 开发报表。 学习制作 JasperReports 报表的捷径是参考其自带的范例,JasperReports 的工程文件包

中含有大量范例。

87

Page 94: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

12.6.1 安装

下载地址 http://jasperforge.org/sf/projects/ireport 下载 iReport-2.0.2-windows-installer.exe,按提示执行默认安装即可。

12.6.2 基本设置

打开 iReport 的“Options” -“ 选项”: General:语言设为“中文(中国)” Compiler:设置编译路径,即 jasper 文件的输出路径

点击“存档”保存设置。

12.6.3 数据源设置

需要将 jdbc 驱动包复制到 iReport 安装路径的 lib 文件夹下。 1. 打开 Data->“连接/资料来源”,点击“new”,选择 JDBC 连接:

2. 点击“next”,配置数据源(如下图所示)后测试并保存:

3. 设为 Default 或在报表设计时通过 Data->“设定动态连接”来设定当前数据源

12.6.4 PDF 报表的中文处理

需要将中文包 iTextAsian.jar(可从 fastunit/WEB-INF/lib/下复制)加入 iReport 安装路径的

lib 文件夹下。 报表设计时,字体设置如下:

88

Page 95: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

12.6.5 使用 Report Wizard 创建报表

File -> Report Wizard 设置数据查询

选择需要的字段

89

Page 96: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

设置分组字段

选择布局模板

90

Page 97: FastUnit 开发手册 - read.pudn.comread.pudn.com/downloads156/ebook/695290/FastUnit... · z 了解Java 编程基本概念:面向对象、接口、继承等; z 了解关系数据库的SQL

12.6.6 编译和预览

编译 选择“建立”的“编译”选项,在编译路径下生成一个 jasper 文件。

预览 在“建立”菜单下选择预览模式,然后选择“执行报表”。

91