eterna第三个案例-解决查询和分页
1、准备查询语句吧
<!-- query --> <query name="yyw.search.query"> <prepared-sql> select * from my_table #sub[where $] </prepared-sql> <readers> <reader name="id" type="String" caption="编号" /> <reader name="name" type="String" caption="姓名" /> <reader name="age" type="int" caption="年龄" /> <reader name="birth" type="Date" caption="生日" /> <reader name="memo" type="String" caption="备注" /> </readers> </query>
2、新建搜索(包括搜索条件)
<!-- search --> <search name="yyw.search" queryName="yyw.search.query" searchManager="123"> <condition-propertys> <condition-property name="age1" colName="age" caption="年龄(大于)" colType="String" defaultBuilder="notBelow"></condition-property> <condition-property name="age2" colName="age" caption="年龄(小于)" colType="String" defaultBuilder="notLarge"></condition-property> <condition-property name="name" caption="姓名" colType="String"></condition-property> <condition-property name="birth" colType="String" inputType="text_date" caption="生日"></condition-property> </condition-propertys> </search>
3、配置业务
<export name="yyw.search.export" path="/view.jsp" viewName="yyw.search.view" /> <model name="yyw.search.model" modelExportName="yyw.search.export"> <search-execute /> </model>
4、配置view
<view name="yyw.search.view"> <!-- 这里使用了一个定义好的typical-component,里面已经定义了分页的控制条等。baseComponentName:使用的typical-component --> <replacement name="search_component" baseComponentName="search_component"> <before-init> eg_temp.dataName = "queryResult";<!--eg_temp.dataName 指目前上下文环境中的数据对象的名称;queryResult指向查询结果 --> {$dataV:eg_temp.dataName+'_modelName'} = "yyw.search.model";<!-- {$dataV:eg_temp.dataName+'_modelName'}:查询提交的model的名称。 --> {$dataV:eg_temp.dataName+'_searchName'} = "yyw.search"; <!--{$dataV:eg_temp.dataName+'_searchName'}:查询使用的search的名称。 --> </before-init> <!-- 这个replacement是baseComponent下的节点,这是根据节点进行替换,这里的name不能换,否则系统将显示不了这个模块 --> <replacement name="search"> <!-- table-form里的name也不能换 --> <!-- baseName:基于的某个query、ReaderManager或search的名称,可通过这些对象的定义在自动生成表格。 --> <table-form name="conditions" columns="20,30,20,30" baseName="search:yyw.search" dataName="searchManager"> <cells cellOrder="title"> <!-- titleSize就是cell中name所占表格,containerSize就是下面的内容所占的表格数 --> <cell name="title" titleSize="0" containerSize="4"> <component-param>attr:{align:"left"}</component-param> <init-script>webObj.text("请输入查询条件");</init-script> </cell> <cell name="bottons" titleSize="0" containerSize="4"> <component-param>attr:{align:"center"}</component-param> <component name="queryBtn" type="input-submit"> <component-param>attr:{value:"查询"}</component-param> </component> </cell> </cells> </table-form> </replacement> <replacement name="showList"> <!-- 这里的table-list的名字不能换名字,否则就显示不了 --> <!-- baseName:基于的某个query或ReaderManager的名称,可通过这些对象的定义在自动生成表格 --> <!-- dataName:数据对象的名称,对应eg_temp中的dataName属性。同样内容是queryResult不变 --> <table-list name="list" baseName="query:yyw.search.query" dataName="queryResult" > </table-list> </replacement> </replacement> </view>
5、下面研究下view
将其详细内容抽出如下:
<view name="yyw.search.view"> <replacement name="search_componentx" baseComponentName="search_component"> <before-init> </before-init> <replacement name="search"> <table-form name="conditions" columns="20,30,20,30" baseName="search:yyw.search" dataName="searchManager"> </table-form> </replacement> <replacement name="showList"> <table-list name="list" baseName="query:yyw.search.query" dataName="queryResult" > </table-list> </replacement> </replacement> </view>
6、整体
<eterna-config> <factory> <objs> <!-- query --> <query name="yyw.search.query"> <prepared-sql> select * from my_table #sub[where $] </prepared-sql> <readers> <reader name="id" type="String" caption="编号" /> <reader name="name" type="String" caption="姓名" /> <reader name="age" type="int" caption="年龄" /> <reader name="birth" type="Date" caption="生日" /> <reader name="memo" type="String" caption="备注" /> </readers> </query> <!-- search --> <search name="yyw.search" queryName="yyw.search.query" searchManager="123"> <condition-propertys> <condition-property name="age1" colName="age" caption="年龄(大于)" colType="String" defaultBuilder="notBelow"></condition-property> <condition-property name="age2" colName="age" caption="年龄(小于)" colType="String" defaultBuilder="notLarge"></condition-property> <condition-property name="name" caption="姓名" colType="String"></condition-property> <condition-property name="birth" colType="String" inputType="text_date" caption="生日"></condition-property> </condition-propertys> </search> <export name="yyw.search.export" path="/view.jsp" viewName="yyw.search.view" /> <model name="yyw.search.model" modelExportName="yyw.search.export"> <search-execute /> </model> <!-- 配置查询的视图 --> <view name="yyw.search.view"> <!-- 这里使用了一个定义好的typical-component,里面已经定义了分页的控制条等。baseComponentName:使用的typical-component --> <replacement name="search_componentx" baseComponentName="search_component"> <before-init> eg_temp.dataName = "queryResult";<!--eg_temp.dataName 指目前上下文环境中的数据对象的名称;queryResult指向查询结果 --> {$dataV:eg_temp.dataName+'_modelName'} = "yyw.search.model";<!-- {$dataV:eg_temp.dataName+'_modelName'}:查询提交的model的名称。 --> {$dataV:eg_temp.dataName+'_searchName'} = "yyw.search"; <!--{$dataV:eg_temp.dataName+'_searchName'}:查询使用的search的名称。 --> </before-init> <!-- 这个replacement是baseComponent下的节点,这是根据节点进行替换,这里的name不能换,否则系统将显示不了这个模块 --> <replacement name="search"> <!-- table-form里的name也不能换 --> <!-- baseName:基于的某个query、ReaderManager或search的名称,可通过这些对象的定义在自动生成表格。 --> <table-form name="conditions" columns="20,30,20,30" baseName="search:yyw.search" dataName="searchManager"> <cells cellOrder="title"> <!-- titleSize就是cell中name所占表格,containerSize就是下面的内容所占的表格数 --> <cell name="title" titleSize="0" containerSize="4"> <component-param>attr:{align:"left"}</component-param> <init-script>webObj.text("请输入查询条件");</init-script> </cell> <cell name="bottons" titleSize="0" containerSize="4"> <component-param>attr:{align:"center"}</component-param> <component name="queryBtn" type="input-submit"> <component-param>attr:{value:"查询"}</component-param> </component> </cell> </cells> </table-form> </replacement> <replacement name="showList"> <!-- 这里的table-list的名字不能换名字,否则就显示不了 --> <!-- baseName:基于的某个query或ReaderManager的名称,可通过这些对象的定义在自动生成表格 --> <!-- dataName:数据对象的名称,对应eg_temp中的dataName属性。同样内容是queryResult不变 --> <table-list name="list" baseName="query:yyw.search.query" dataName="queryResult" > </table-list> </replacement> </replacement> </view> </objs> </factory> </eterna-config>