根据用户查询选择动态显示表的数据列

阅读更多
有的时候,当用户选择查询条件时碰到查询结果列表字段太多时,常常会想要 选择性地只显示部分由自己选择的字段.现在为了达到根据用户选择动态显示查询结果的列的效果,可以在查询条件上构建一个checkboxlist,当 用户勾选某几个字段时,查询结果的列只显示用户选中的这几个字段.另外,为了达到友好的用户体验,如果用户一个字段都没选中,会有提示的效果.
(注:本实例只给出部分关键的代码)

step1.部分关联的jsp页面代码

			统计显示列*
			
				日期 
				运营商
				合作商
				业务
				省份
				明细
			
		
			
			
				
					
		   			
		


注:比如选择运营商、业务、省份,则reportSearchVO.rowFields={2,4,5}

step2.相关的js代码
function Verfidy() {		
		var tmp = document.getElementsByName("reportSearchVO.rowFields");
		var field=null;
		for (var i=0;i 
 

step3.reportSearchVO对应的(相关列显示)属性如下:
 
private String[] rowFields;
  private RowFieldVO rowFieldVO = new RowFieldVO();

其中,RowFieldVO:
  public static final int ROW_FIELD_DATE = 1;
	public static final int ROW_FIELD_SP=2;
	public static final int ROW_FIELD_CP=3;
	public static final int ROW_FIELD_SERVICE=4;
	public static final int ROW_FIELD_PROVINCE = 5;
	public static final int ROW_FIELD_FLAG =6;




	/**
	 * 0: 不显示;1: 显示
	 */
	private int isShowDate = 0;
	private int isShowProvince = 0;
	private int isShowSP=0;
	private int isShowCP = 0;
	private int isShowService =0;
	private int isShowFlag =0;
	
	/**
	 * 判断并获得要统计显示的列
	 * @param rowFields
	 * @return
	 */
	public void setShowRowField(String[] rowFields){
		for (String rowField : rowFields) {
			int rowValue = Integer.valueOf(rowField);
			if (rowValue == RowFieldVO.ROW_FIELD_DATE) {
				isShowDate = 1;
			}else if (rowValue == RowFieldVO.ROW_FIELD_PROVINCE) {
				isShowProvince = 1;
			}else if(rowValue == RowFieldVO.ROW_FIELD_SP){
				isShowSP = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_CP){
				isShowCP = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_SERVICE) {
				isShowService = 1;
			}else if (rowValue ==RowFieldVO.ROW_FIELD_FLAG) {
				isShowFlag = 1;
			}
		}
	}


step4.查询的action和service
action:
reportResultVOList = reportService.getReportList(reportSearchVO);


service:
reportSearchVO.getRowFieldVO().setShowRowField(reportSearchVO.getRowFields());//引用step3中rowFieldVO的setShowRowField方法判断哪些字段是需要显示的


step5.查询的sql语句(ibatis)
SELECT '0',
				
				b.dates,
				
				
				      null dates,
			    
			    
				b.spId,
				
				
				      null spId,
			    
			    
				b.cpId,
				cp.username cpName,
				
				
			    
			          null cpId ,
				      null cpName,
			    
			    
				
				b.serviceCode,
				service.name serviceName,
				
				
				
				null serviceCode,
				null serviceName,
				
				
				b.provinceId,
				province.provinceName,
				
				
				null provinceId,
				null provinceName,
			    
FROM XXX WHERE 
				 b.dates BETWEEN #beginDate# AND #endDate#		             
				
				 
						AND b.spId=#spId#
				
				
						AND b.cpId=#cpId#
					
				
						AND b.serviceCode=#serviceCode#
				
				
						AND b.provinceId=#provinceId#
				


step6.动态显示查询结果的页面
表头:
日期
				运营商
				合作商
	      		业务
				省份
(注:表中省略):


这样,就达到了由用户选择动态显示所选字段的效果. step3是本业务的核心代码.另外注意标签的使用.
  • 根据用户查询选择动态显示表的数据列_第1张图片
  • 大小: 24.7 KB
  • 查看图片附件

你可能感兴趣的:(java,web,动态显示字段)