`
sunarrow
  • 浏览: 18036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Cwin1.0用户手册第三部分:进入核心,Window的配置

阅读更多

<!----><!----><!----> <!---->

进入核心:深入 Window

在上一个部分中,我们对 table 的配置作了比较详细的介绍。前面我们说过,表名被看成了一个默认的 Window 来使用。是的,让我们打开 config 目录下的 window.xml 。哦,这个文件里面什么也没有。我们能看到 window.xml 定义了两个子元素。 <single> <multi> 。其中 <single> 用来定义单窗口操作。 <multi> 用来定义主从关系 ( 一对一,一对多 ) 的多窗口操作。其中 Single 窗口是 Multi 的基础。我们先进入 Single 的配置。

单窗口配置

所有的单窗口配置都位于 <single> 元素之下。当我们需要定义一个新的 Window 时,需要在 <single> 元素之下添加一个 <window> 元素。

属性介绍

我们先来看 <window> 元素的属性:

Id        窗口的唯一标识,在 window.xml 中唯一,同时不可与 table.xml 中的 ID 相同。

Table   如果该窗口中定义的所有元素都属于同一张表,则需要定义此项。

Type:   窗口的类型,有三个可选项:

       1. popular     也就是示例中 user_demo 的默认类型。

       2. grid           1 类似,但他无法执行编辑操作,用于使用 SQL 的窗口展示方案。

       3. single        如果选择了该项,那么 window CRUD 操作都可以在一个页面完成。

Function :窗口所拥有的功能。包括 ” query,add,update,delete” 。各项功能之间使用逗号分隔。对于窗口类型为 grid 的,除 query 功能以外,其它功能都即使定义了也将是无效的。

Css      定义了该窗口要使用的样式文件。如果定义了,那么该 css 文件必须要在 cwin/css 目录下能找到。

子元素介绍

<window> 允许的子元素有以下几种:

<desc>,<fields>,<form>,<grid>,< extra>,< sql>,< limits>

下面我们来逐项介绍 window 的子元素。

desc: 描述

这一项最简单了,就是这个 Window 的描述。将直接显示在页面上。

fields: 字段列表

他包含了这个 Window 的所有字段。他的子元素与 table 配置中的 table 元素的子元素一致。包含了一系列的 <field> 元素列表。 <field> 的元素与 table.xml 中的 <field> 定义完全一致。如果 Window 定义了 table 属性, Cwin 会自动引用在 table.xml 中定义的相同 name 的元素。如果 Window 没有定义 table 属性,那么为了使 field 引用到已有的 field 定义,需要将引用将要写为: <field ref=”table.field”/> 的形式,有关元素的引用详细介绍,请参看上一章的元素引用部分。如果您的字段是一个聚合函数的结果,在 table.xml 中没有定义,那么,就需要在此为这个字段作一个定义。

form: 编辑表单配置

form 的配置比较简单,他只有两个属性:

alertErrorMsg :是否跳出错误信息?选项为 boolean 类型。如为 false 将在页面上显示错误信息。

cols :定义了编辑表单一行输出的列数。

grid :输出表格配置

grid 包括四个内置属性与六个自选属性。自选属性的意思是在 xml 中定义之后会原样输出在前台 HTML 中。比如样式,表格高度等等。

四个内置属性包括:

pageSupport :是否需要分页支持。默认为 true

containsSn :是否在输出时包括列号,默认为 true

containsCheckboxL 是否有输出时包含单行框,默认为 false

pageSize :分页时每页的记录数

六个自选属性包括:

cellspacing, cellpadding, style, class,width, height

这里需要注意的是, width height 是字符串型,值可以是整数或是百分数。比如 width=”100%” ,也可以是 width=”1024px” 。当然,这些都在 css 中有默认的定义。

extra :扩展列定义

扩展列的意思就是在输出表格时多加上的列。

它可以包含一系列的 <output> 子元素, <output> 元素的定义与 <field> 的子元素 <output> 的定义方式一致。具体定义方式请查看 <field> 的子元素 <output> 的定义。

sql :查询定义

Cwin 支持根据 SQL 来展示查询表格。 sql 元素用来定义查询语句。需要注意的是:查询的字段需要在 <fields> 中定义,否则在查询列表中就看不到了。

limits :查询与输入限制

limit 子元素用来定义这个 Window 的限制。定义了这个限制,在查询时将自动将 limits 配置加为查询条件,插入数据时也将以 limits 配置为默认值。

Limits 子元素由一系列的 <limit name=”field” value=”fieldValue”> 值组成。

示例 1

现在,老板提出了一个需求:

用户列表的名字需要改为:用户管理中心

密码不要显示在表格与编辑表单,新增的密码都需要是: 123456

展示表格每页以 20 条记录显示。

要求只管理普通用户。

不允许删除操作。

加一个广告列链接到 Cwin 作者的 BOLG

界面的 css 需要换一套方案。

OK ,我们按照老板的需求,根据上面 Window 定义的介绍。给出了一个 window 的定义:

 

<window id="user_demo_1" table="user_demo" type="popular" function="query,add,update">
	<desc> 用户管理中心 </desc>
	<fields>
	    <field name="id"/>
	    <field name="login_name"/>
	<field name="type"/>
	    <field name="create_time"/>
	    <field name="intro"/>
	</fields>
	<grid pageSize="20"/>
	<extra>
		<output desc="blog" dispMode="link" href="http://sunarrow.iteye.com/"/>
	</extra>
	<limits>
		<limit name="type" value="0"/>
	</limits>
</window> 
 

哦,有一个问题比较麻烦,就是密码的默认值。这个我们得修改 table.xml password 字段定义。修改为:

<field name="password" desc=" 密码 " minLen="6" maxLen="20" store="md5" default=”123456”> ,好了,将我们的 window 定义加入到。

<sinlge></single> 元素之间。打开我们的浏览器,访问:

http://localhost:8080/cwin/cwin?_CWIN_ID=user_demo_1 吧!

用户可以将 window type 改为 single 试试!

 

示例 2 SQL Grid

由于使用单表的 SQL 查询展现 SQL Window 不太够用。请诸位读者先读完下一章节再回到这个示例。

OK ,我们现在在 user_demo user_demo_ex 表里都有了数据。有一天,老板要求在一个表格中将用户基础信息与扩展信息同时展示出来,并且要求能根据登录名与真实姓名查询。嗯,这个很简单,一条 SQL 语句就能把数据查出来。写好 SQL 如下:

select u.id,u.login_name,u.email,u.type,u.intro,ex.real_name,ex.tel,ex.address,ex.postcode from user_demo u left join user_demo_ex ex on (u.id = ex.id)

那么,如何在 Cwin 中配置呢?废话不说了,直接上配置:

 

<window id="user_demo_and_ex" type="grid" function="query">
	<desc> 用户以及他的扩展信息 (SQL 查询 )</desc>
	<fields>
		<field ref="user_demo.id" isKey="true" fullName="u.id"/>
		<field ref="user_demo.login_name" cond="like" fullName="u.login_name"/>
		<field ref="user_demo.type" order="u.type"/>
		<field ref="user_demo.email"/>
		<field ref="user_demo.intro"/>
		<field ref="user_demo_ex.real_name" cond="like" fullName="ex.real_name"/>
		<field ref="user_demo_ex.tel"/>
		<field ref="user_demo_ex.address"/>
		<field ref="user_demo_ex.postcode"/>
	</fields>
	<extra>
		<output desc="BLOG" title=" 请帮忙多发些评论啊 !" dispMode="link" href="http://sunarrow.iteye.com?id=[id]"/>
	</extra>
	<sql>select u.id,u.login_name,u.email,u.type,u.intro,ex.real_name,ex.tel,ex.address,ex.postcode from user_demo u left join user_demo_ex ex on (u.id = ex.id)</sql>
</window>
 

这就是全部的配置。我们需要显示的字段都各自引用了所在表定义的元素。如: (ref=”user_demo.type”) 。另外我们可以看到登录名与真实姓名列我们定义了查询。用户类型列定义了排序。从这个配置中您也应该能理解 fullName 这个属性的含义了。因为在比较复杂的 SQL 中,排序时将需要写上全名甚至是聚合函数。 Order 属性也是如此。

动态参数与通过 URL 对页面的引用

动态参数

现在大老板又有新的需求了,他需要管理那些管理员。在 user_demo_1 中,我们把 <limits> 元素删除,这样我们可以管理所有的用户。现在我们可以通过动态参数来管理管理员。

目前:管理所有用户的 URL 是:

http://localhost:8080/cwin/cwin?_CWIN_ID= user_demo_1

那么通过动态参数,管理普通用户的 URL 是:

http://localhost:8080/cwin/cwin?_CWIN_ID= user_demo_1&user_type=0

管理管理员的 URL 是:

http://localhost:8080/cwin/cwin?_CWIN_ID= user_demo_1&user_type=1

动态参数的参数是在 Window 中定义的字段名。参数的值将作为 Window 的查询默认值与新增时的值。功能上相当于动态的定义了 <limits> 元素。但动态参数无法覆盖在 <limits> 中定义的限定。

通过 URL 对页面的引用

在前面的例子中,使用过一个这样的输出配置: <output dispMode="link" href="cwin?_CWIN_ID=user_demo&amp;_CWIN_ACTION=show&amp;id=[id]" target="_blank"/> 。这个输出配置表示:用来查看 Window user_demo 的展示页,显示 id [id] 的用户信息,其中 [id] 是一个变量。

同样的,如果我们需要引用这个用户的编辑页面,那么 URL 可以这样写: cwin?_CWIN_ID=user_demo&amp;_CWIN_ACTION=toEdit&amp;id=[id] 。其中 _CWIN_ID _CWIN_ACTION 是系统参数,分别表示 Window ID 和动作。 _CWIN_ACTION 的另外两个可选项是 query delete 。也就是说,通过 URL 能引用 Window 的查询页也能直接删除 Window 中的数据。

多窗口配置

多窗口配置都集中在 <multi> 子元素以下。

每一个 Multi-Window 由一个 <pri-sec> 元素定义。

目前多窗口配置支持一对一与一对多模型。

实际上,一对一与一对多的配置除了属性 type 以外完全相同。

现在,我们来看看 <pri-sec> 的属性:

属性介绍

Id :这个属性就不用介绍了,要求唯一。

Type :多窗口类型,有两个可选项: oneone onemany 。这很好理解,分别定义一对一与一对多。

Primary :主窗口,必须是一个 Single Window

Secondary :从窗口,也必须是一个 Single Window

Trigger :调用从窗口的方式。有两个选项: auto :自动,当选中一行主表数据时会自动调用从窗口。 opt :手动,将在主窗口的展示表格中新加一列。点击之后将调用从窗口。

子元素介绍

Multi-Window 的子元素比较简单,只有一个描述 (desc) 和一组关系 (relations)

desc 元素: Multi-Window 的描述。

relations 元素:可以包含不定数量的 relation 子元素。

relation 元素:它的属性有: primary ,要求是主窗口中的一个字段。 secondary :要求是从窗口中的一个字段。它俩应拥有主从窗口之间的关联关系。

一对一演示

为了我们能使用一对一的演示,我们需要新建一张 user_demo_ex 的扩展表。

 

CREATE TABLE `user_demo_ex` (
  `id` int(11) NOT NULL auto_increment,
  `real_name` varchar(30) default NULL,
  `tel` varchar(20) default NULL,
  `address` varchar(100) default NULL,
  `postcode` varchar(10) default NULL,
  `create_time` datetime default NULL,
  `modify_time` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

 

直接上配置:

 

<pri-sec type="oneone" id="user_demo_ex_oo" primary="user_demo" secondary="user_demo_ex" trigger="auto">
	<desc> 测试,用户--与用户扩展,一对一关系 </desc>
	<relations>
		<relation primary="id" secondary="id"/>
	</relations>
</pri-sec> 
 

同样的,在 URL 中使用 id 来访问这个一对一的演示。

在目前的版本中,多窗口的页面还有一些已知的 BUG ,不过并不会损坏数据。

一对多演示

暂无

 

分享到:
评论
5 楼 hyw520110 2008-11-20  
恩,已经下载看过了,文档也做的很好,不过有其中个别地方写的不对,小问题。
大哥方便留个即时联系方式吗?我的QQ:hyw520110@163.com,交流谈不上,希望大哥给点指导!XML不是很熟
4 楼 sunarrow 2008-11-20  
当然是开源的,项目地址是:http://code.google.com/p/cwin/
但我这个不自动生成代码唉 ---- 不生成代码 -- 都是一些通用API在调用。
如果您需要使用,我建议您从SVN上下载最新的代码,使用过程中也许会有一些问题。欢迎随时交流。。
3 楼 hyw520110 2008-11-20  
对了,问下大哥你的这个框架开源么?我考虑拿来做一个小项目,试下。
之前看到的基于SSH的那个项目是开源的,但我是接手别人的项目,升级成本太大所以没有采用,就自己写了个struts的简单封装,基本上算是对付过去了,但今天又来了个新项目,现在公司裁员,我没有帮手一个人负责两个以上的项目怕应付不来,所以考虑自动生成。不知道.........
2 楼 sunarrow 2008-11-20  
谢谢支持!一对多结构还是支持的,不支持多对多结构,因为多对多关系中需要有中间表,通用方案不太好做。。
现在确实不到实用阶段,而且现在上班忙也没有多少时间来继续更新它了。
我也不知道1.0的final版甚至beta版什么时候才能发布---呵呵
1 楼 hyw520110 2008-11-19  
支持一对多,多对多吗?无主键表好像也不支持吧?
有个和CWIN类似的基于SSH的(自动生成器)项目好像也和这个差不多。我认为都还没到实用成熟阶段。不过做到这样已经算是很好很强大了!

相关推荐

    VC继承于CWIN的透明时钟

    在VC++编程环境中,"VC继承于CWin的透明时钟"是指利用MFC(Microsoft Foundation Classes)库中的CWin类进行派生,创建一个具有透明效果的时钟控件。这种技术通常用于构建用户界面,使时钟可以无缝融入到其他图形...

    Dartou_cwin5:ActionScript3.0框架

    【Dartou_cwin5: ActionScript3.0框架】是一个由深圳市大头互动文化传播有限公司开发的开源框架,专门针对ActionScript3.0编程语言设计。这个框架旨在提高开发效率,提供一套完整的解决方案,用于创建丰富的互联网...

    win32窗口封装类_c++

    1. **窗口类定义**:定义一个C++类,如`CWin32Window`,该类需要包含必要的成员变量,如窗口句柄(HWND)、窗口类名(LPCWSTR)等。 2. **初始化**:在类中提供一个初始化函数,用于设置窗口类属性,如窗口风格(WS...

    VC继承于CWIN的实时曲线控件

    在Microsoft Visual C++ (VC++) 开发环境中,创建一个继承自CWin的实时曲线控件是一种常见的需求,尤其是在开发涉及到图形界面和数据可视化的应用程序时。CWin是MFC(Microsoft Foundation Classes)库中的基类,它...

    用于Winamp2.0插件的光谱分析器源代码(25kb)

    4. CWin32Window.cpp:可能与Windows窗口对象相关,用于创建和管理Winamp插件的窗口。 5. docking.cpp:可能涉及插件在Winamp界面中的停靠和布局逻辑。 6. wafuncs.cpp:可能包含了Winamp API的函数实现,这些API...

    用于Winamp2.0插件的光谱分析器源代码

    5. `CWin32Window.cpp`:可能包含了Windows API窗口处理的代码。 6. `docking.cpp`:可能涉及到窗口的停靠功能,使插件可以自由地在Winamp界面上移动和调整大小。 7. `wafuncs.cpp`:可能包含Winamp API函数的封装,...

    弹出窗口互相传值范例

    例如,敏感数据通常不建议通过查询字符串传递,因为可能会被浏览器历史记录或者第三方工具截取。而对于非敏感数据,简单的方法如查询字符串或隐藏字段就足够了。 总结来说,弹出窗口间的值传递是Web开发中的常见...

    明基 8180C 扫描仪 驱动

    标题中的“明基 8180C 扫描仪 驱动”指的是明基公司生产的8180C型号扫描仪的驱动程序。在计算机硬件系统中,驱动...同时,如果在安装或使用过程中遇到问题,可以查阅官方的用户手册,或者联系明基的客户服务获取帮助。

    用于Winamp2.0插件的光谱分析器源代码spectrumplugin

    5. CWin32Window.cpp:这可能是处理Win32窗口和用户交互的代码,用于创建和管理插件的界面元素。 6. docking.cpp:可能涉及到插件的浮动和停靠功能,允许用户自由安排分析器在Winamp窗口中的位置。 7. wafuncs.cpp:...

    CWinListBox-CWin派生的自定义列表框控件

    CWinListBox是Windows GUI编程中的一个重要组成部分,它允许用户在列表中选择一个或多个项目。在MFC中,列表框通常由CListBox类表示,但为了满足特定需求,有时需要对其进行扩展和自定义。在标题中提到的...

    Yah3cWin:中山大学东校区(位于 HEMC 高等教育中心)Windows 上的 Yah3c 客户端

    Yah3cWin 中山大学东校区(位于 HEMC 高等教育中心)Windows 上的 Yah3c 客户端项目背景这是一个很早的项目,2013年7月开始。当时我想对SYSU Yah3c客户端做一些改进。 众所周知,Yah3c客户端是中山大学学生永远不会...

    VC++五子棋单机版源代码

    - `CWin`类是游戏的核心,包含了一个15x15的二维数组`chess`,用于存储棋盘的状态。它还提供了`init()`方法初始化棋盘,`win(int x, int y)`方法检查给定位置(x, y)是否有五子连珠,这通常是通过遍历棋盘并检查相邻...

    WINDOWS3.1安装程序

    3. **配置硬件**:在安装过程中,系统会询问有关硬件的详细信息,如内存大小、显示卡类型等,以便优化设置。 4. **创建桌面**:Windows 3.1会创建一个新的桌面环境,包括图标、任务栏和开始菜单的雏形。 5. **安装...

    如何显示windows error string

    `FormatMessage`函数是Windows API的一部分,它的主要作用是从系统消息表中提取字符串。这些字符串可以包括错误信息、警告信息、状态信息等。当你有一个错误代码,并想获取与之对应的详细错误信息时,`FormatMessage...

    js实现的真正的iframe高度自适应(兼容IE,FF,Opera)

    经过上述调整,这个高度自适应的`iframe`解决方案能够在IE、FF和Opera上正常工作,不再出现纵向滚动条,确保了用户体验的一致性。然而,值得注意的是,这个方法可能不适用于所有情况,例如Safari、Chrome等其他...

    ActionScript3代码规范,ActionScript编程必读.doc

    ActionScript3是一种强大的脚本语言,主要用于开发Adobe Flash平台的应用程序。为了确保代码的可读性、可维护性和团队协作的高效性,遵循一套统一的代码规范至关重要。以下是基于提供的文档内容提炼出的ActionScript...

    转接聊天.socket.末完成

    1. **TCP/IP协议栈**:Socket是TCP/IP协议族的一部分,它建立在IP层之上,为应用程序提供网络服务。 2. **套接字API**:在大多数操作系统中,Socket API提供了创建、绑定、监听、连接和读写数据等函数,如`socket()`...

    [c++中文化编程]之ComboBox(组合框)的类封装。

    在C++编程中,"中文化编程"是指将软件界面和功能本地化,使其能够适应中文用户的需求。在这个特定的场景下,我们关注的是ComboBox控件的类封装,这是一个在Windows GUI应用程序中常用的选择项组件。ComboBox通常由一...

    Squirrel+Win32 DLL.rar

    IDABORT =3, IDRETRY =4, IDIGNORE =5, IDYES =6, IDNO =7, } local iRet = dllUser32.MessageBoxA( 0, "脚本调用动态库!", "提示信息", eMB.MB_YESNOCANCEL ); print( iRet == eID.IDYES ); }

    Iframe 自动适应页面的高度示例代码

    window.opera) { if (cwin.contentDocument && cwin.contentDocument.body.offsetHeight) cwin.height = cwin.contentDocument.body.offsetHeight + 30; else if (cwin.Document && cwin.Document.body.scrollHeight...

Global site tag (gtag.js) - Google Analytics