当前位置:文档之家› Appframe开发手册-积分项目组

Appframe开发手册-积分项目组

Appframe开发手册-积分项目组
Appframe开发手册-积分项目组

积分项目组Appframe开发参考文档

文档概述

由于大家手上的appframe二次开发文档版本已经比较旧,很多东西已经废弃更新,此文档是更新并删减了appframe二次开发文档的一些内容和用例,将当前我们开发的一些核心的方法整理了一下,能为大家开发时候做一个参考

Appframe的总体架构

APPframe为开发基于J2EE框架的企业级应用提供一个统一的可扩展的开发框架,这个框架包括了使用的技术、设计模式、辅助工具等,目的是通过框架来规范开发模式,提高代码质量,降低编码复杂度,提高代码复用度。

APPFrame的体系结构如下图:

●界面层:提供统一的js组件和jsp标签

●界面管理层:提供页面流转控制、页面访问权限控制、数据校验

●业务逻辑管理层:提供事务管理、对象标识管理、日志、对象权限管理

●数据持久化层:实现O/R mapping功能。

appframe具体内容

对开发人员而言,他们看到的AppFrame包含这样一些内容:

●1个jar包:appframe.jar

●1个js文件目录:jsv2

●两个标签库文件:appframe2.tld、ana.tld

●一个平台级别的web.xml文件

●两个开发配置工具:ConfigTools

●一些第三方jar包

其中,appframe.jar包含了界面管理层、业务逻辑管理层、数据持久化管理层等平台核心代码和对外接口,具体包括:

?com.ai.appframe2.bo:数据持久化管理

?https://www.doczj.com/doc/dd2616556.html,mon:公共接口

?com.ai.appframe2.configtool:配置工具

?com.ai.appframe2.dbdatasource:数据源管理

?com.ai.appframe2.listdatasource:下拉数据源管理

?com.ai.appframe2.privilege:权限管理

?com.ai.appframe2.set:set配置管理

?com.ai.appframe2.util:工具类

?com.ai.appframe2.web:web页面管理

?com.ai.appframe2.service:服务管理

?com.ai.appframe2.event:事件管理

jsv2目录包含了界面层的管理,具体包括:

?DataSource_v2.js:页面下拉数据源管理

?DataType_v2.js:web页面数据类型管理

?FieldType_v2.js:web页面基本控件管理

?FormRowSet.js:页面组件DBForm

?TableRowSet.js:页面组件DBGrid

?Globe_v2.js:全局方法

?NomalRowSet.js:数据集管理

?UserData.js:用户自定义xml解析、访问

?DBTree_new.js:web组件DBTree_new

?PopMenu_v2.js:页面组件PopMenu

?UIRelation_v2.js:界面组件之间关系

?Object_v2.js:界面事件定义

configtools是一个单独运行的java Application程序,用来配置数据源DataSource、生成BO、Set、DS文件及自动生成和BO对应的java文件,包括以下:

**Bean.java (业务操作类) ;**Engine.java(操作引擎类);I**Value.java(数据接口类)

其中BO,Set,Ds,**Bean.java (业务操作类) ,**Engine.java(操作引擎类)一般都要对应生成在功能目录下面的bo文件夹中,I**Value.java(数据接口类)生成在ivalues文件夹中。

对应configtools使用手册参看《Appframe配置工具configtool使用手册》

业务术语

J2EE(java 2 Platform Enterprise edition):J2EE是SUN公司提出的在分布式环境中的一种体系结构,它提供了一种基于组件的设计、开发、集成、部署企业应用系统的方法。J2EE的核心技术包括;JDBC、JSP、Servlet、EJB、XML、RMI、JavaMail等。

Session:存储特定用户会话所需的信息,当用户在应用程序的Web 页之间跳转时,存储在Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

O/R mapping(Object Relational Mapping):java对象和数据库对象之间的映射,通过O/R mapping实现java对象对数据库的透明访问。

BO(business object):BO定义了业务对象数据的来源、数据属性以及业务对象的操作与关联。BO通过configtools配置工具配置生成,包含一个.bo文件和5个.自动生成的java 文件,这个5个文件是BOxxBean.java、BOxxEngine.java、BOxxMap.java、xxBean.java、xxEngine.java。

表BO:BO的一种,数据来源为数据库表。

查询BO:BO的一种,数据来源为sql查询语句。

BOBEAN:APPFrame配置工具configtools根据BO对象生成的JA V A文件xxBean.java。

SET:set定义了web页面的数据来源、展示的格式,具体表现为使用configtools配置生成一个.set文件。

DS数据源(data source):ds定义了页面显示的下拉列表数据源,具体表现为使用configtools配置生成一个.ds文件。

DataContainer:数据容器,APPFrame中传递和处理数据的基本类。

DataModel:数据模型,即J2EE设计模式M-V-C中的M,又称model。

RowSet:结果集,由此派生出FormRowSet、TableRowSet等。

NormalRowSet:通用结果集,可以DBForm、DBGrid、DBTree多种方式展示。

DBForm:页面组件,以form自由格式展示数据。

DBGrid:页面组件,以grid表格方式展示数据。

DBTree:页面组件,以树的方式展示数据。

PopMenu:页面组件,弹出式菜单。

DBListBox:页面组件,下拉列表。

开发流程

第一步:界面开发

界面文件主要是jsp、html以及js文件。

开发界面一般会使用页面数据源set,如果这个页面上有下拉列表框,还会使用到ds,set和ds都是使用配置工具configtools配置完成的,按照配置工具使用说明,完成所需要的set、ds配置,在配置set过程中可用设置界面元素的校验。这是界面开发的第1步。

按照jsp的语法规范,完成jsp的编写,这是界面开发的第2步。在编写jsp代码的时候,别忘了包含对APPFrameV5.0提供的js文件、css文件的引用。

在配置set的过程中,你可能会需要使用一个BO来构建set,那么,先配置一个BO好了。配置BO的工作实际上就是持久层开发,因为配置工具除了生成一个.bo文件外,还自动生成了5个.java文件,这5个java文件是数据持久层需要的java class。

如果只是数据查询而且是使用缺省DataModel(缺省DataModel是APPFrameV5.0提供的数据集获取方法,建议使用缺省DataModel以简化开发过程,与此对应的还有自定义model),只要上面的工作就可以了,如果你的应用涉及对数据库的新增、修改、删除操作,就需要进入第二步:界面控制。关于页面数据的保存和自定义model的详细信息,请参考第6章。

第二步:界面控制

界面控制层需要写一个servlet,这个servlet必须继承BaseAction类。

这个servlet做业务逻辑的判断,决定调用哪个java class或者EJB进行业务逻辑处理,这些业务逻辑处理最终反映在数据上就是对数据库的新增、修改、删除操作。

APPFrameV5.0中提供了数据保存的一个缺省实现com.ai.appframe2.web.defaultAction 来实现新增、修改、删除操作的保存。前提是您要保存的数据对应着一个或几个表BO,这几个表BO之间没有关联关系。如果你打算使用这个缺省的实现,就不需要写任何servlet,只要在页面开发时指定这个类的方法作为你的保存方法就可以了。但对一些逻辑关系复杂的表BO,还是需要自己写servlet的。详细说明参考第6章。

第三步:持久层开发

使用配置工具configtool完成BO的配置,自动生成BO相应的java文件。这一步也可以和第一步页面开发同时进行。

第四步:业务逻辑开发

完成第三步工作后,接下来进行业务逻辑开发,也就是写java class 或者EJB的过程,在此过程中,需要使用配置工具自动生成的.java文件。

在配置工具生成的5个java文件中,使用xxEngine.java的save()方法来实现保存。同时这个类还提供getNewID()、getSysTime()、getBeans()等常用方法,其他的4个类并不常用。

第五步:联调程序

完成第一到第四步就可以进行最后的调试了。

页面组件DBGrid

DBGrid页面展示

DBGrid是一个最常用的页面组件,以表格方式展现数据,主要用来展示查询的数据结果,或者进行简单的数据维护。

一个DBGrid的样式如下:

DBGrid的实现原理

DBGrid是一个表单组件,根据需要,通过GridDataModelInterface(表格数据模型)接口的实现类得到结果集,将结果集以DBGrid表格的形式进行显示。用户在使用DBGrid时需要在jsp文件中使用tag标签定义表格的显示方式。

APPFrameV5.0提供缺省的GridDataModelInterface实现来生成结果集,用户也可以通过自己实现GridDataModelInterface接口类来构造自定义的DataModel。

通过DBGrid组件展现数据时,需要一个通过配置工具configtools配置的页面数据源set。

你不用关心上面列出的这些类的具体实现,因为开发中不会用到这些类。开发人员所要用到的是以下接口详细说明中描述的内容,也就是具体的怎样对这个页面组件进行操作

DBGrid接口说明

?js对象g_TableRowSetManager

g_TableRowSetManager对象是APPFrameV3.0内建的表格数据集管理器,对页面内的所有表格对象进行管理。g_TableRowSetManager在页面加载时自动构建。

方法说明:

Get(pk):参数pk为DBGrid唯一标识tableID,通过该方法获得DBGrid表格数据集的引用。Push(SetName):参数SetName为页面数据源set名称,该方法向管理器中增加一个表格数据集。

Remove(pk):删除一个表格数据集对象。

使用范例:

//取得tableID为userinfotb的DBGrid表格数据集的引用

var TabelRowSet= g_TableRowSetM anager.get(“userinfotb”);

//取得tableID为userinfotb的DBGrid表格当前选中行的行号

var curRow = TabelRowSet.getRow();

?js对象TabelRowSet提供的方法

TableRowSet对象是表格数据集,通过g_TableRowSetManager.get()获得对象句柄。

方法说明:

? setEditSts(value):设置表格的编辑状态value = true(可编辑),false(不可编辑) ? setRowEditSts(rowIndex,value):根据行号设置行的可编辑属性value = true(可编辑),false(不可编辑)

? getRowEditSts(rowIndex):根据行号获取行可编辑属性:true(可编辑),false(不可编辑)

? setColEditSts(colIndex,value):根据列名设置列的可编辑属性value = true(可编辑),false(不可编辑)

? setTableBgColor(color):设置表格的背景颜色,参数color类似”#ff ff0000”

? setHeadBgColor(color):设置表头的颜色

? setCurRowBgColor(color):设置表格的当前行背景颜色

? setCurCellBgColor(color):设置当前单元格的背景颜色

? s etBorderColor(color):设置表格的边框颜色

? setBorder(num):设置表格的边框宽度颜色,参数num为一个整数。

? setRowBgColor(rowIndex,color):设置指定行的背景颜色

以上方法主要用来设置DBGrid组件的外观,事实上我们经常采用APPFrame默认的设置,很少通过以上方法做修改。

下面的方法对你至关重要,他们提供了对DBGrid的有用操作

? getRow():获取当前行号,返回一个整数,第一行行号为0。

? setRow(rowIndex):设置当前行号,rowIndex为整型。

? getCol():获取当前列号,返回整数,第一列列号为1。

? setFocus(rowIndex,colIndex):将焦点设置到指定的单元格上

? setFocusByName(rowIndex,colName):将焦点设置到指定的单元格上

? getNameByIndex(colIndex):获得列名

? newRow():在页末尾新增一行,翻页前需要保存。增加参数isScrollIntoView(true|false),指定是否在新增行时是否进行页面滚动

? deleteRow(rowIndex):删除指定一行。如果一次删除多条记录,必须从行号最大的记录开始删除,翻页前需要保存。

? count():本页有效的行数

? getTotalRowCount():获取总记录数

? isSelected(rowIndex):测试某一行是否选中

? rowSelected(rowIndex,isSelected):设置某一行的选中状态isSelected = true(选中) false(不选中)

? getSelectedRows() : 获取选中行行号数组

? getValue(rowIndex,colName):获取指定单元的数据值,参数为行号、列名

? getDisplayText(rowIndex, colName):获取指定单元的显示值

? setValue(rowNumber,fieldTypeName,id,value):根据行号,列名设置单元格的值,value 为显示值id 为数据值

? refresh(condition):根据condition条件表达式刷新TableRowSet,条件中不能出现order by。Appframe5.0解决了refresh后table的列不能拖拉的问题,同时需要保持原先的列宽

? refreshByDefineQeruy(queryid,aCondition,parameter):根据自定义查询编号和额外条件进行查询

? toXmlString():将TableRowSet对象数据转化为Xml字符串。

? clearListBox(fieldName):清除列表中数据。

? sort(colName,sortType):按字段进行页内排序。sortType(true:升序,false:降序)

? disabledSelect(rowIndex,flag):设置某一行的多选按钮为不可编辑。flag : true(不可编辑),false(可编辑)

? setAllSelectCheckBoxSts(value):设置全选按钮的编辑状态

? getServerPK():获得服务端缓冲数据编号

? toXmlStringOfSelects(colnames,isIncludeDisplayAttr):将选中数据行转化为Xml字符串。

? toXmlStringOfRows(rows,colnames,isIncludeDisplayAttr):将指定数据行转化为Xml字符串

? setPageSize(aPagesize):设置每页显示的记录数量

?refreshForObd(parameters,qryset):查询参数,查询的SET数据集

? rowSelected():参数有rowIndex行号,isSelected是否被选中(true/false),isTriggerEvent是否触发OnRowSelected事件(true/false),通过该方法可以通过js方法设置DBGrid中某一行是否被选中,以及是否触发OnRowSelected事件,满足通过代码设置checkbox时候不触发onrowselect事件的需求

? resize(width,height):设置表格宽度,但不会影响列的宽度

? getColWidth(colIndex):取得指定列的宽度,0是第一列

? setColSortFunction(colName, sortMethod):按指定的排序方法sortMethod,对字段colName进行排序

? insertRow(rowIndex,isScrollIntoView) :在指定的行号rowIndex处,增加一新行, 如果isScrollIntoView为ture,在有滚动条的情况下,新增行的时候,滚动条会自然移动到新增的行处,为false,则不处理滚动条.

?js对象TabelRowSet支持的事件

? O nRowFocusChange :行焦点改变事件

? O nCellFocusChange:单元格焦点改变事件

? O nValueChange:单元格值改变事件

? O nGridDbClick :双击事件,当DBGrid标签的editable设置为true时,不响应此事件。

? O nContextMenu : 鼠标右键事件

? O nBeforeTurnPage : 翻页前触发事件,参数说明:oldPage,newPage

? O nAfterTurnPage : 翻页后触发事件,参数说明:newPage

? O nRowSelected:行选中触发事件,参数说明:RowIndex,isSelected (:true,false) RowIndex = -100 表示全部选中

? O nResize:表格宽度改变事件,参数说明:oldWidth,oldHeight,newWidth,newHeight

DBGrid标签选项

通常,在一个jsp文件中,table标签使用方法如下:

setname="https://www.doczj.com/doc/dd2616556.html,erInfoSet"

ondbclick="showModify" tableid="userinfotb"

tablemodel="com.ai.appframe2.web.datamodel.MethodModelForService"

implservice_name="https://www.doczj.com/doc/dd2616556.html,erInfoSrv"

implservice_querymethod="getUserInfo(String phoneid, String brandType, String levelType,int $STARTROWINDEX,int $ENDROWINDEX)"

footdisplay="true" editable="false" rowsequence="true"

pagesize="5" height="350" width="780" multiselect="false"

cacheid="level1" onrowchange="showModify"

onlyquery="" initial="false" implservice_countmethod="getUserInfoCount(String phoneid, String brandType, String levelType)"

onrowselected="" needrefresh="true">

下面对标签作详细说明:

●tableid:DBGrid的唯一标识

●setname:DBGrid对应的页面数据源set

●height:DBGrid的高度

●width:DBGrid的宽度

●multiselect:是否允许多选(是否在DBGrid第一列显示checkbox)

●needrefresh:如果程序中需要调用TableRowSet的refresh方法,必须设置为true。

●Editable:是否允许编辑DBGrid

●Oncontextmenu:鼠标右键事件

●Ondbclick:双击事件

●Pagesize:每页显示记录数,超过此数需要翻页,pagesize数值不大于1000。

●Conditionname:DBGrid初始化条件名称,通常和Parametersname属性一起使用。

●Onvalchange:单元格值改变改变事件

●Oncellchange:单元格焦点改变事件

●Onrowchange:行改变事件

●Parametersname:参数名称,通常和condition属性一起使用。将参数放入HashMap,

Parametersname即HashMap中的key值。

●Tablemodel:dataModel,不填即认为是缺省的DataMode。如果是自定义dataModel,

填写全路径的自己实现GridDataModelInterface类名。

●Initial:初始化DBGrid时是否需要查询数据库,True或false。初始化一个空的

DBGrid时将initial设为true可以显著提高性能。

●rowheight:设置表格行高度,如果行高度< 0,则不设置行高度,行自动段落折叠,

避免数据信息被强行遮挡的情况

●rowsequence:true/false,选择true,则在表格的最前列将添加移行序列

●mo:指定配置工具生成的MO文件所在位置

●operator:指定操作名称,对应MO文件中的定义的操作

●modealtype:指定无权查看内容的显示方式,有三种。

‘mask’:以***显示,类似密码输入框的显示方式;

‘hidden’:内容发送到前台,属性为‘hidden’;

‘no’:内容不发送到前台;

注意:关于DBGrid翻页显示区域中显示记录数量和翻页按钮图片,使用时设置TAG 的属性footdisplay =”bolck”全部显示;footdisplay =”none”全部不显示;footdisplay =”rowcount”只显示记录数量,不显示翻页控制按钮。

应用实例

具体应用参看我给大家的demo实例

页面组件DBForm

DBForm的页面展示

DBForm是一个非常有用的页面组件,主要用来以自由格式form方式展现数据,通常用于对一条数据的详细信息显示、对一条数据的新增,修改页面中。

一个DBForm的样例如下:

DBForm的实现原理

DBForm是一个表单组件,根据业务需要通过DBFormDataInteface接口的实现类得到结

果集,将结果集(一条结果)中的每个字段以不同的显示类型(文本框,下拉列表框,文本域,checkbox选择框等)进行显示。

使用时,用户需在jsp页面中定义一个DBFORM的标签,在DBFORM的标签中包含若个DBFROMFIELD标签,每一个DBFormField代表一个字段。获取数据时,APPFrameV5.0提供默认DefaultDataModel用来生成结果集。用户也可以通过自定义DBFormDataInteface 接口的实现类来构造自定义的FormDataModel。

通过DBForm展示数据时,需要一个使用配置工具configtools生成的页面数据源set。

你不用关心上面列出的这些类的具体实现,因为开发中不会用到这些类。下面接口详细说明中描述的内容,是开发人员应该重点关心的。

DBForm的接口说明

FormRowSet数据集对应一条数据,页面初始化或查询时,如果数据集超过一条数据,系统会抛出异常。

?js对象g_FormRowSetManager

g_FormRowSetManager对象是APPFrame内建的form数据集管理器,对页面内的所有form组件进行管理,在页面加载时自动构建。

方法说明:

Get(pk):参数pk为DBForm唯一标识FormID,通过该方法获得DBFrom数据集对象句柄。Push(SetName):参数SetName为页面数据源set名称,该方法向管理器中增加一个DBForm

数据集。

Remove(pk):删除一个DBFrom数据集对象。

使用范例:

//取得id为queryUserInfo的form的引用

var fmRowSet = g_FormRowSetManager.get("queryUserInfo");

//通过引用取得form中段名称为MOBILE_PHONE_NO

var phone_id = fmRowSet.getValue("MOBILE_PHONE_NO");

?js对象FormRowSet提供的方法

FormRowSet是APPFrame内建的form数据集对象,通过g_FormRowSetMananger.get()方法获得对象引用,提供的方法包括:

?setEditSts(value):设置表格的编辑状态value = true(可编辑),false(不可编辑)

?setColEditSts(fieldName,value):根据列名设置列的可编辑属性value = true(可编辑),false(不可编辑)

?getValue(fieldName):获取指定字段的当前数据值,如果该字段没有使用dbformfield 标签显示地定义,则getValue()无法获取字段值。

?getDisplayText(fieldName):获取指定字段的显示值

?setValue(fieldName, Text,value):根据行号,列名设置数据值, value数据值text显示值

?toXmlString():将form数据集转化为Xml字符串。

?setStsToOld():设置formRowSet数据集状态为“O”为老数据,即使调用保存方法,也不会保存数据。

?setStsToDel():设置formRowSet数据集合的状态为删除状态D,调用保存方法后将物理删除数据库相应记录。一般不建议使用此方法。

?newRow():新增一空白页,此时formRowSet状态为NN

?refresh(condition):FormRowSet刷新,condition条件中不能出现order by条件。

?setFocus(fieldName):设置制定字段为选中状态

?getColNames() 返回所有字段的名称。如ORGAIZE_ID,REMRKS

?clearListBox(fieldName):清除列表中数据。

?clearValue(pFieldName)清空指定字段值,状态不变

?getSts():返回当前的行状态,NN-新增状态,N新增但某些列做了修改,U修改状态,O老状态,D删除状态

?getTitle(fieldName) 获取指定列的列名称

?getEditType(fieldname)获取指定列的编辑类型.是文本框下拉框.

?refreshForObd(parameters,qryset):查询参数,查询的SET数据集

?isEditable():form是否可编辑。但所有字段不可编辑时返回‘false’,否则返回‘true’?isColEditable(fieldname):form的某个字段是否可编辑

?setStsToNew():设置form数据集合为新增行状态,如果原字段有值,该字段为N,如果没有值,该字段为NN。

?refreshDynamicListBox(fieldName):刷新动态下拉数据源的数据,匹配id为下拉文本,fieldName为字段名称,可为","分割

?refreshListBox(pFieldName,pCondition,isTriggerEvent):此方法针对DBForm中的由DS配置的字段,此DS配置的字段有变量作为查询参数(如:sql查询形的DS,且含有条件参数变量),页面上可以针对DBForm对象中此字段进行单个刷新;pFieldName 为字段名称,pCondition为字段对应DS的查询条件, isTriggerEvent为form中的字段信息改变的触发事件是否有效,如果设置为false,则DBForm中配置的字段值改变的触发事件对此pFieldName字段无效

?setImeModeSts(fieldName,sts):开启或关闭某个字段的中文输入控制,sts=true表示开启,false表示关闭

Appframe新增校验方法,必须include CommUtil.js文件

?FormRowSet.isFieldNull(pFieldNames,isShowAlert):判断DBForm的指定字段是否为空,如果为空返回true,并alert警告。否则返回false

pFieldNames -- 校验的字段名称串,每个字符以"," 分割,如果为空表示全部进行校验

isShowAlert -- 为空是否弹出alert警告

返回值-true/false

?FormRowSet.validate(pFieldNames,isJudgeNull,isShowAlert):字段合法性校验。根据set配置的字段类型,最大长度,精度对用户的输入进行判定。并alert警告,否则返回false,支持String,数字,浮点,date,datetime等类型,类型以set的类型匹配。

pFieldNames -- 校验的字段名称串,每个字符以"," 分割,如果为空表示全部进行校验

isJudgeNull -- 是否进行是否为空的判定,功能与isFieldNull方法类似isShowAlert -- 为空是否弹出alert警告

注意:

1.使用setV alue()、getV alue()等方法时,参数列名必需是使用标签

显式的定义了的列。

2.页面初始化后,form就有一条空记录,不需要显式调用newRow()来增加一条

空记录。

?verfiy(fieldName):字段合法性校验,为validate方法的兼容方法。参数说明同validate

?js对象FormRowSet支持的事件

●OnValueChange:field字段值改变事件

●onFoucsIn:字段获得焦点事件,参数FieldName vval,text

●onFoucsOut:字段失去焦点事件,参数FieldName val,text

注意:

前台form中当发生valuechange事件时,调用自己的方法对发生change的字段setValue。但当再用界面把值改为setValue前的值时,不会触发valuechange事件

DBForm标签选项

以上是一个DBForm的实例,

datamodel="com.ai.appframe2.web.datamodel.MethodModelForService"

setname="https://www.doczj.com/doc/dd2616556.html,erInfoSet">

客户号码

formid="addUserInfo" width="180" visible="true" />

用户品牌

ds="com.ai.demo.bo.CustBrandType" initial="true" listsize="1" showtype="list" />

用户级别

ds="com.ai.demo.bo.CustLevelType" initial="true" listsize="1" showtype="list" />

说明如下

●Formid:DBForm的唯一标识

●Setname:对应的页面数据源set名称

●Conditionname:条件名称,用于初始化form

●Parametersname:参数名称,和condition配合使用

●Onvalchange:OnV alueChange事件

●Datamodel:Model数据源,可以使用自定义,也可以使用缺省model,不选此项表

示缺省DataModel,自定义model为DBFormDataModelInterface的实现类名。

●Initial:初始化DBForm时是否需要查询数据库,选择True/false,选择false不查

询数据库,可以提升初始化的性能。

●Editable:整个Form是否可编辑,false为不可编辑,即使内部field设置为

editable=”true”也不能编辑

●mo:指定配置工具生成的MO文件所在位置

●operator:指定操作名称,对应MO文件中的定义的操作

●modealtype:指定无权查看内容的显示方式,有三种。

‘mask’:以***显示,类似密码输入框的显示方式;

‘hidden’:内容发送到前台,属性为‘hidden’;

‘no’:内容不发送到前台;

DBFormField是DBForm内部字段的标签,属性包括:

●Formid:该字段所属的formid。

●Fieldname:DBform内字段名称,也是set中字段名称。

●Height:字段高度

●Width:字段宽度

●Visible:字段是否可见

●Editable:是否可编辑

应用实例

具体应用实例参加我给大家的demo项目

其他页面组件和全局方法

一些相对简单页面组件的实现包含在:FieldType_v2.js、DataType_v2.js文件中,可以在编写jsp、html代码时使用这些组件。

下拉列表框的js实现

除了在DBForm、DBGrid中使用下拉列表,也可以单独定义一个下拉列表框,只要定义了相关的ds。具体实现方法如下:

2、装载数据到下拉列表,并且设置默认值。https://www.doczj.com/doc/dd2616556.html,anize为ds名称,

createStaticListDataSource(),fillListBox()为APPFrameV3.0提供的全局方法。

3、createStaticListDataSource()方法中parms为参数字符串,例如:

“organize_id = 1&state=”+astate

其中organize_id和state是在organize.ds中配置的参数,&是参数之间的分隔符。 下拉列表框的jsp tag实现

在APPFrame V2.0中提供了下拉列表框listbox的js实现,在2.1版中又增加了jsp tag 方式的实现,使得代码更简洁。在3.0版中属性和方法有所改变。

实现类:com.ai.appframe2.web.tag.AIListBoxTag

属性和事件:

●Id(必需):listbox的唯一标识id

●ds(必需):对应的config目录下ds名称,例如:“sysmgr.privilege.DSStaff”

●showtype(可选):数据的展现类型,有两种展现类型:listbox(下拉列表)/list(列表)。

如果不写默认为listbox

●multiselect (可选):当显示类型是list时,是否允许多选

●listsize(可选,默认为2):当显示类型为list时,表示列表列数

●parameters (可选):初始化时的条件参数。为名-值对表示,多个参数之间使用&

分割,参数名称与ds中的参数名称相同

●Nulltext(可选):空选项,就是默认选项时的文本内容

●Nullid(可选):空选项,就是默认选项时的value内容

●Width(可选):列表宽度

●Onchange(可选):列表改变时,需要调用的事件函数名称。就是函数名称。不需

要填写参数。例如onchange=”abc”

则函数abc的完整函数应为:

function abc(id,text)

{

alert(id + '---' + text);

}

Id,text表示改变后选中的value和文本。

●Styleclass(可选):Appframe3.1新增属性,用来定义listbox的显示样式

Js文件名称:jsv2/DBListBox.js

主要方法说明:

●g_getListBox(id):获取下拉列表框对象。之后可以以下方法:

●getID():获取选中ID值

●getValue():获取文本值

●setValue(value):设置下拉数据源的选中项目

●addItem(id,value):增加一个选项option

●delItem(value):删除指定value的option

●delSelItem():删除选定的option

●refresh(para):根据参数重新刷新数据。为名-值对表示,多个参数之间使用&分

割,参数名称与ds中的参数名称相同。

●getAllItem():返回列表中所有的值和text,返回类型为array。里面为object,

object.id为值,obj.text为文本

●delAllItem():Appframe3.1新增方法,用来删除下拉框所有数据

●setDisabled():用于设置下拉框的可用和不可用的状态

当选择类型为list,并且multiselect=true多选时,如果选择多个时,getID,getValue方法返回选中的多个id和value,之间以”,”分割

补充说明:

下拉列表数据源ds目前有4种来源:一种来自BO,一种来自sql,一种是static数据,还要一种是通过java 方法获得的二维字符数组作为数据源。在配置ds时选择类型为function,并且配置java类和获取数据的方法名称即可。获取方法的原型定义如下:String[][] fexecute(HashMap parameter) throws Exception;

函数名称:fexecute可以任意取

参数:parameter类型为HashMap,在HashMap中存储类获取数据必须的参数。KEY 的参数的名称不区分大小写,V ALUE为参数值(全部采用字符串作为数据类型)。

返回值:二维字符串数组:{value(下拉数据的值),text(下拉数据的显示值)}

日期控件

日期控件是系统经常使用的控件之一,除了根据set配置生成外(一般是在DBForm、DBGrid中使用),可以使用APPFrameV3.0提供的js对象直接生成日期控件。下面是示例代码:

把这段代码加在任何需要输入日期的地方。

获取日期值可以使用如下方法:

queryDate.getID();

tab页

TabPage 是一个常用的js组件。本组件由多个tabitem组成,一个tabitem可关联一个页面,可以点击tabItem的页头切换tabitem。在每一个tabitem所关联的页面上部署其他的业务组件,可以灵活的实现特定的需求。

TabPage分为两种类型:横向TabPage和纵向TabPage。显示效果如下:

?实现原理

tab页通过两个jsp 标签tab 和tabitem实现。

?相关类说明

?Tag标签说明

js对象说明

Js文件名称:TabPage.js

主要方法说明:

1. getCurrentTabFocusItem() 取当前聚焦的TABItem的索引号,没有聚焦返回-1

2. getTabItemIdxsByTabItemId(aTabId,aItemId) 根据aItemId获得该aItemId对应的TAB index的数组

3. setTabItem(aTabId,aItemId) 根据TAB编号和TABITEM编号设置Tab当前页

4. setTabItemByItemIdx(aTabId,aIdx) 根据TAB编号和TABITEM索引设置Tab 当前页

5. refreshTabItem(aTabId,aTabItemId,aTitle,aUrl) 根据TabItem的名称刷新

6. refreshTabItemByIdx(aTabId,aIdx,aTitle,aUrl) 根据TabItem的索引号刷新

7. openNewTabItem(aTabId,aTabItemId,aTitle,aUrl,aIsDeletable,aIdx) 新增Tab页

8. closeTabItem(aTabId,aTabItemId) 根据ItemId编号删除TAB页

9. closeTabItemByIdx(aTabId,aIdx) 根据Item索引号删除TAB页

10. setTabItemDeletable(aTabId,aItemId,aEditable) 根据Item名称设置对应Item的是否可删除属性

11. setTabItemDeletableByIdx(aTabId,aIdx,aEditable) 根据Item索引设置对应Item的

是否可删除属性

12. getTabItemDeletable(aTabId,aItemId) 根据Item名称取对应Item的是否可删除属性

13. getTabItemDeletableByIdx(aTabId,aIdx) 根据Item索引号取对应Item的是否可删除属性

14. getTabType(aTabId) 根据TAB编号取TA类型

15. setTabItemLen(aTabId,aTabItemId,aTabItemLen) 设置TabItem的页头的宽度

?使用实例

登录验证码

平台提供com.ai.frame.loginmgr.webaction.VertifyCodeServlet类,通过在页面中加入对该servlet的访问,就可以生成验证码。

如下例子代码

登录检查控制开关

通过设置AIConfig.xml文件中的配置项'IS_LOGIN_CHECK_FLAG'进行设置,可以控制后台是否对页面访问时进行登录用户合法性校验。可设置值为'Y'、'N'。

如下面的设置,不进行校验检查:

文本预览
相关文档 最新文档