WebRAD:构建基于Web的数据库应用程序
发布时间: 2025-08-17 00:51:47 阅读量: 1 订阅数: 5 

### WebRAD:构建基于Web的数据库应用程序
在Web开发中,构建数据库应用程序是一项常见且重要的任务。本文将介绍一些相关的工具和技术,包括Voodoo Web Controls,以及如何构建自己的类库,同时分析不同方法的优缺点。
#### 1. Voodoo Web Controls
Voodoo Web Controls是一款用于Web Connection应用程序开发的产品。它能满足Web Connection应用开发的重要需求,与ASP的兼容性也可能是一些组织选择它的卖点。不过,在审查Voodoo 1.1版本时,发现它在满足可访问性指南方面缺乏灵活性。相关HTML大多在整体的RenderTop()方法中渲染,不利于轻松子类化。若要为特定用户更改整个表单,可编写“访客”代码在渲染前迭代并按需更改每个控件。建议为Voodoo添加一个属性,允许为每个控件指定可选的CSS类。
对于需要可视化设计工具的开发者,Voodoo 1.1版本需通过代码完成表单设计。不过,开发者Pertti Karjalainen宣布了一个免费的开源工具“Visual Voodoo Designer”(VVD),可使用Visual FoxPro表单设计器布局表单,再转换为Voodoo对应形式。
#### 2. 构建自己的类库
如果不想使用第三方产品,可设计自己的表单和控件类库。一个完整的类库至少应包含以下内容:
- **一组控件类**:可能从单个“基”类派生,处理数据绑定、HTML渲染和表单值处理,还包含空方法支持子类中的验证代码,允许与业务对象交互进行独立验证。
- **表单类**:作为单个控件的容器,可直接与Web Connection框架交互,或通过应用程序过程子类中的方法进行脚本编写。
- **扩展性**:能够通过特定于应用程序的子类和附加控件扩展类库。
- **可选的容器类**:允许以支持页面框架、网格和更复杂表单布局选项的方式嵌套控件组。
#### 3. 基本文本框类
为了开始构建类库,先创建一个封装Web文本框控件的类。
##### 3.1 初始文本框类
```foxpro
* webradTextbox.PRG
DEFINE CLASS webradTextbox_1 AS CUSTOM
cValue = ""
FUNCTION Render
RETURN [<input type="textbox" value="] + THIS.cValue + [">]
ENDFUNC && Render
ENDDEFINE
```
测试该类的步骤如下:
1. 在服务器类的SetServerEnvironment()方法中添加以下行:
```foxpro
SET PROCEDURE TO webradTextbox ADDITIVE
```
2. 在Web Connection进程类的任何方法中“脚本化”文本框:
```foxpro
LOCAL loTxt
loTxt = CREATEOBJECT( "webradTextbox_1") && SET PROCEDURE first!
Response.Write( loTxt.Render())
```
也可在命令窗口测试:
```foxpro
DO wconnect && load Web Connection utility classes
loTxt = NEWOBJECT( "webradTextbox_1", "webradTextbox.PRG")
ShowHTML( loTxt.Render()) && launches the browser
```
##### 3.2 改进后的文本框类
```foxpro
DEFINE CLASS webradTextbox_2 AS CUSTOM
cValue = ""
lValueLoaded = .F.
cControlSource = ""
cHtmlName = ""
cLabel = ""
nSize = 0
FUNCTION Render
* "Template method" pattern—calls 2 other methods.
RETURN THIS.RenderLabel() + THIS.RenderControl()
ENDFUNC &&Render
FUNCTION RenderLabel
RETURN IIF( EMPTY( THIS.cLabel), [], ;
[<label for="] + THIS.cHtmlName + [">] + ;
THIS.cLabel + [:</label>]) + [ ]
ENDFUNC && RenderLabel
FUNCTION RenderControl
* This renders the actual textbox on the Web page.
RETURN [<input] + ;
[ type="textbox"] + ;
[ name="] + THIS.cHtmlName + ["] + ;
[ id="] + THIS.cHtmlName + ["] + ;
[ value="] + THIS.cValue + ["] + ;
IIF( THIS.nSize <= 0, [], ;
[ size="] + TRANS( THIS.nSize) + ["]) + ;
[>]
ENDFUNC && RenderControl
FUNCTION cHtmlName_ACCESS
* (See discussion in text below.)
RETURN IIF( EMPTY(THIS.cHtmlName), THIS.Name, THIS.cHtmlName)
ENDFUNC && cHtmlName_ACCESS
FUNCTION cValue_ACCESS
* (See discussion in text below.)
IF NOT EMPTY(THIS.cControlSource) AND NOT THIS.lValueLoaded
THIS.LoadValue()
ENDIF
RETURN THIS.cValue
ENDFUNC
FUNCTION LoadValue
* Seeds the textbox with the current database value
* (vs providing an empty textbox).
IF NOT EMPTY(THIS.cControlSource)
THIS.cValue = TRANSFORM( EVAL( THIS.cControlSource))
THIS.lValueLoaded = .T.
ENDIF
ENDFUNC && LoadValue
ENDDEFINE
```
在命令窗口测试新功能:
```foxpro
DO wconnect && load Web Connection utility classes
loTxt = NEWOBJECT( "webradTextbox_2", "webradTextbox.PRG")
loTxt.cLabel = "Version"
loTxt.cControlSource = "VERSION()"
loTxt.nSize = 60
ShowHTML( loTxt.Render()) && launches the browser
```
改进后的类具有以下特点:
- 添加
0
0
相关推荐










