sunarrow 发表于 2013-1-29 07:50:12

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如下:
selectu.id,u.login_name,u.email,u.type,u.intro,ex.real_name,ex.tel,ex.address,ex.postcodefrom 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="/></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&_CWIN_ACTION=show&id="target="_blank"/>。这个输出配置表示:用来查看Windowuser_demo的展示页,显示id为的用户信息,其中是一个变量。
同样的,如果我们需要引用这个用户的编辑页面,那么URL可以这样写:cwin?_CWIN_ID=user_demo&_CWIN_ACTION=toEdit&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,不过并不会损坏数据。
一对多演示

暂无
 
页: [1]
查看完整版本: Cwin1.0用户手册第三部分:进入核心,Window的配置