1. 功能介绍

    查询数据

  2. 开发步骤

    1. 编写HTML查询条件区表单
    2. 编写HTML查询结果列表区
    3. 编写页面Java事件
    4. 编写Java Bean方法
  3. 代码片段

    1. 配置文件代码

    2. HTML写法(参考quickstart/web/examples/basic/VipcustList.html)

      <table>
      	<thead>
      		<tr>
      			<th><input type="checkbox" id="vips_ctrl" name="vips_ctrl" onclick="checkedAll('vips', checked)"/></th>
      			<th>VIP标识</th>
      			<th>客户名称</th>
      			<th>服务号码</th>
      			<th>证件号码</th>
      			<th>VIP类型</th>
      			<th>VIP等级</th>
      			<th>客户经理</th>
      			<th>加入时间</th>
      			<th>操作</th>
      		</tr>
      	</thead>
      	<tbody>
      		<!-- 循环显示表格列,并设置行间隔颜色 -->
      		<tr jwcid="@Foreach" source="ognl:infos" value="ognl:info" element="tr" index="ognl:rowIndex" class="ognl:rowIndex % 2 == 0 ? '' : 'odd'">
      			<td><input type="checkbox" id="vips" name="vips" jwcid="@Any" value="ognl:info.VIP_ID"/></td>
      			<td><a jwcid="@wade:PageRedirect" source="ognl:info" columns="VIP_ID" value="ognl:info.VIP_ID" onclick="redirectTo('examples.basic.VipcustEdit', 'queryVipcust', parameters)"/></td>
      			<td><span jwcid="@Insert" value="ognl:info.USECUST_NAME" raw="false"/></td>
      			<td><span jwcid="@Insert" value="ognl:info.SERIAL_NUMBER" raw="false"/></td>
      			<td><span jwcid="@Insert" value="ognl:info.USEPSPT_ID" raw="false"/></td>
      			<!-- 根据参数编码,翻译成参数名称,这种翻译都缓存过,可随意使用,参数翻译支持#号的全参数表翻译,也支持不带#号的TD_S_STATIC的翻译,如TD_S_STATIC/TYPE_ID=STAFF_SEX -->
      			<td><span jwcid="@Insert" value="ognl:@com.linkage.component.util.Utility@getStaticValue(page, '#td_m_viptype', info.VIP_TYPE_CODE)" raw="false"/></td>
      			<td><span jwcid="@Insert" value="ognl:@com.linkage.component.util.Utility@getStaticValue(page, '#td_m_vipclass', info.VIP_CLASS_ID)" raw="false"/></td>
      			<!-- 根据员工ID翻译员工名称,这种翻译必须要表配置在ehcache.xml中后才能用,否则效率会很低 -->
      			<td><span jwcid="@Insert" value="ognl:@com.linkage.component.util.Utility@getStaticValue(page, 'TD_M_STAFF', 'STAFF_ID', 'STAFF_NAME', info.CUST_MANAGER_ID)" raw="false"/></td>
      			<!-- 格式化日期 -->
      			<td><span jwcid="@Insert" value="ognl:@com.linkage.component.util.Utility@decodeTimestamp('yyyy-MM-dd HH:mm', info.JOIN_DATE)" raw="false"/></td>
      			<!-- 注册任务,通过ajaxDirect方式触发,传递VIP_ID,由于这里的this表示a这个对象,故用self,如果在script中编写,可以写成ajaxDirect(this... -->
      			<td><a jwcid="@wade:PageRedirect" source="ognl:info" columns="VIP_ID" value="注册任务" onclick="ajaxDirect(self, 'createVipcustTask', parameters);self.afterAction='alert(\'任务注册成功\')';"/></td>
      		</tr>
      	</tbody>
      </table>
      
    3. JAVA(PAGE)写法(参考quickstart/src/doc/../examples/basic/ExamplesBean.java)

      /**
       * 查询VIP客户资料
       * @param cycle
       * @throws Exception
       */
      public void queryVipcusts(IRequestCycle cycle) throws Exception {
      	PageData pd = getPageData();
      	
      	ExamplesBean bean = new ExamplesBean();
      	IDataset dataset = bean.queryVipcusts(pd, pd.getData("cond", true), pd.getPagination());
      	setInfos(dataset);
      	
      	setCondition(pd.getData("cond"));
      }
      
    4. JAVA(BEAN)写法(参考quickstart/src/doc/../examples/basic/ExamplesBean.java)

      /**
       * 根据传入的条件动态查询VIP客户列表
       * @param pd
       * @param param
       * @param pagination
       * @return Dataset
       * @throws Exception
       */
      public IDataset queryVipcusts(PageData pd, IData param, Pagination pagination) throws Exception {	   
      	ExamplesDAO dao = new ExamplesDAO(pd);
      	return dao.queryVipcusts(param, pagination);
      }
      
    5. JAVA(DAO)写法(参考quickstart/src/doc/../examples/basic/ExamplesDAO.java)

      /**
       * 查询VIP客户列表,根据不同的条件动态生成SQL
       * @param param
       * @param pagination
       * @return IDataset
       * @throws Exception
       */
      public IDataset queryVipcusts(IData param, Pagination pagination) throws Exception {
      	SQLParser parser = new SQLParser(param);
      	parser.addSQL("select vip.* from TF_F_CUST_VIP vip where 1 = 1");
      	parser.addSQL(" and vip.IN_DATE >= to_date(:START_DATE, 'yyyy-mm-dd')");
      	parser.addSQL(" and vip.IN_DATE < to_date(:END_DATE, 'yyyy-mm-dd')");
      	parser.addSQL(" and vip.VIP_ID = :VIP_ID");
      	parser.addSQL(" and vip.SERIAL_NUMBER = :SERIAL_NUMBER");
      	parser.addSQL(" and vip.USECUST_NAME like '%' || :USECUST_NAME || '%'");
      	parser.addSQL(" and vip.USEPSPT_TYPE_CODE = :USEPSPT_TYPE_CODE");
      	parser.addSQL(" and vip.USEPSPT_ID = :USEPSPT_ID");
      	parser.addSQL(" and vip.VIP_TYPE_CODE = :VIP_TYPE_CODE");
      	parser.addSQL(" and vip.VIP_CLASS_ID = :VIP_CLASS_ID");
      	parser.addSQL(" and vip.CUST_MANAGER_ID = :CUST_MANAGER_ID");
      	return queryList(parser, pagination);
      }
      

      说明:like 的 %必须与变量分开,否则无法正确解析变量
      1. 编写sql并执行,注意,这里的sql中的动态数据都是用预处理sql形式,这样可以减少数据库解析sql的时间,以提高运行效率
      2. pd.getPagination()为获取的分页模型,用来解析分页sql
      3. 在DAO和Bean代码重尽量不要使用pd.getParameter,pd.getData,pd.getPagination等方法,该类数据最好只在page类中使用,如果DAO,Bean中需要使用,需要以方法参数的方式使用,如:bean.queryList(PageData pd, IData param, Pagination pagination);
      4. 如果参数是固定的,建议使用问号形式解析sql,否则建议使用冒号形式
      5. 在展现表格数据时,如果需要用到rowIndex实现表格间隔行的效果,在page中定义<property-specification name="rowIndex" type="int"/>