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

本文深入讲解Cwin框架的配置细节,包括单窗口和多窗口配置方法。重点介绍如何定义窗口属性、子元素及其功能,例如查询、编辑和展示数据等。并通过实际案例展示了如何根据业务需求灵活配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入核心:深入 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        如果选择了该项,那么 windowCRUD 操作都可以在一个页面完成。

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

这里需要注意的是, widthheight 是字符串型,值可以是整数或是百分数。比如 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.xmlpassword 字段定义。修改为:

<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 吧!

用户可以将 windowtype 改为 single 试试!

 

示例 2SQL Grid

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

OK ,我们现在在 user_demouser_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 的另外两个可选项是 querydelete 。也就是说,通过 URL 能引用 Window 的查询页也能直接删除 Window 中的数据。

多窗口配置

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

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

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

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

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

属性介绍

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

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

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 ,不过并不会损坏数据。

一对多演示

暂无

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值