1、page是一个特殊容器,一个页面必须包括一个page,且必须放在顶层,可以嵌套其它容器,但不能被其它容器嵌套。page容器如果配置了多个子组件时,它们将垂直排列,之间的间距由它们的top和bottom属性决定。包括(标题,边框,滚动条,页面拦截器)
2、tabpanel是一个切换容器,一次显示容器中一个子组件。像CSS中的滑动门。
3、panel是一个只能显示一个子组件的容器,子组件可以是除<page/>之外的任意容器或报表表单。
4、framepanel是一个只能显示一个子组件的容器(如extends的不会显示),子组件可以是除<page/>之外的任意容器或报表表单。framepanel容器不能控制标题的显示位置。
<framepanel id="framepanel12" title="我的标题" parenttitle="有边框" margin="10px" border="1">
<report id="report5" extends="pagetitlepage1.report2" top="0"></report>
</framepanel>
Framepanel包裹report。
5、vpanel如果配置了多个子组件(包括容器或报表),它们将以垂直的方式全部显示出来,与上面的<page/>容器一致。
6、hpanel如果配置了多个子组件(包括容器或报表),它们将以横向的方式全部显示出来。
7、从request中获取数据,指定格式为request{key}或request{key.propertyname},session{key},
另外report的title属性支持配置从资源文件和国际化资源文件中取得数据title=${key},和title=i18n{key}.
8、·display在report中用于显示数据像一个table一样,col就是列,group分组,label就是label(囧)。
·Sql在report中与display级别相同,value用来写sql具体语句,condition用来写条件。
·Format与上面的两个级别相同。
9、<interceptor>和report级别相同, report类型 list、blocklist、crosslist、editablelist、editablelist2、listform、detail、editabledetail、editabledetail2、form.
10、report报表的继承,<report id="report1" title="继承外面的报表" extends="listpage1.report1">,形如:page的id.report.id。跟Java一个样。
11、SQL语句中没有用到动态数据,即没有出现@{}、request{}等,则支持标准语法,如果用到动态数据,则要用wabacus的语法,否则就用存储过程。
12、<inputbox type="selectbox">
<option label="全部" value=""></option>
<option source="@{select distinct province from tbl_area}" label="province" value="province"></option>
</inputbox>
从数据库查询的结果作为下拉框的输入条件(condition)
13、<interceptor>报表配置拦截器有三种方式:第一种:通过report标签的interceptor属性配置一个拦截器Java类。第二种:通过report标签引用一个拦截器资源项。第三种:就是通过配置interceptor子标签。
设置权限<interceptor>
<imports>
<import>com.wabacus.util.*</import>
</imports>
<preaction>
rrequest.authorize("report1",Consts.SEARCH_PART,null,"display","false");//隐藏搜索栏
rrequest.authorize("report2",Consts.SEARCH_PART,null,"readonly","true");//只读搜索栏
</preaction>
</interceptor>
14、延迟加载
·第一种方式通过url指定延迟加载,demo中数据展示篇-常用功能配置-延迟加载数据
·第二种方式通过拦截器指定加载
15、数据搜索联想功能
<col column="no" label="工号" clickorderby="true" width="130px" valuestyleproperty="style='mso-number-format:\@;'">
<inputbox jsvalidate="isNotEmpty(${invalid.isnotempty})">
<typeprompt count="15">
<promptcol label="no" title="工号" matchmode="2"></promptcol>
<promptcol label="name" title="中文名"></promptcol>
<datasource>select no,name from tbl_baseinfo where no like '%#data#%'</datasource>
</typeprompt>
</inputbox>
</col>
16、主从表方式,表单篇-主从方式
<report id="report2" title="request{dept_name}详细资料" type="form" jsvalidatetype="1" depends="report1" dependsparams="txtdeptno2=@{deptno}">
17、拦截器作为控制类,拦截器类必须先在配置文件中声明wabuas.cfg.xml,interceptor字标签中如果配置了pageid,那么该拦截器只对该页面有效,如果没有配置,则对所有page有效,page中可以自定义私有的拦截器,必须继承抽象类AbsPageInterceptor。