简单CMS项目笔记之八:后台信息分类筛选模块


以管理员身份登陆之后,就进入了后台信息的显示和审核界面。

显示显示出下拉菜单和单选按钮,组合出筛选条件,按筛选条件提交后显示该条件下的全部信息。


一:筛选选项

登录后显示边栏上筛选选项:


先是提交到新的action

 <s2:form action="admin_ListShow.action?" theme="simple">
下边选好筛选项传给action

这是其中一个筛选项:

在单选中选中一个,然后传给action的showType.payforType,显示名称用%{}取出来,显示中文

单选遍历显示一个TreeMap,Map里名值对存的是:代号--文中意思

遍历此Tree,所选的选项内容是代号,输出显示是中文意义

<tr>
                            <td align="center" colspan="2">
                                <fieldset style="height:60;width:210">
                                  <legend>★付费状态</legend>
                                  <br>
                                  <s2:radio list="#request.payforState" name="showType.payforType" value="%{showType.payforType}"/>
                                </fieldset>
                                <fieldset style="height:60;width:210">
                                  <legend>★审核状态</legend>
                                  <br>
                                  <s2:radio list="#request.checkState" name="showType.stateType" value="%{showType.stateType}"/>
                                </fieldset>
                            </td>
                        </tr>

上边的<s2:radio list="#request.payforState"我找了好久,最后在此页页头发现定义……

    Map payforState=new TreeMap();
    payforState.put("1","已付费");
    payforState.put("0","未付费"); 
    payforState.put("all","全部");
    request.setAttribute("checkState",checkState);
    request.setAttribute("payforState",payforState);



下拉菜单筛选项:

emptyOption="true" 默认是空,K-V对的显示和上边说的一样

                        <tr align="center" height="30" bgcolor="lightgrey">
                            <td>
                               信息类别:
                               <s2:select
                                   emptyOption="true"
                                   list="#session.typeMap"                           
                                   name="showType.infoType"/>
                               <s2:submit value="显示"/>
                            </td>
                        </tr>



二:筛选条件转化成SQL查询结果

上述的筛选条件传递给action,action的ListShow方法经过组装SQL语句,再查询,再组装查询结果,最后把结果传给jsp页面


根据上边的筛选条件,组装相应的SQL语句

		if(!stateType.equals("all")&&!payforType.equals("all")){			//没有同时选择“付费状态”与“审核状态”中的“全部”选项
			mark="1";
			sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_state=?) AND (info_payfor=?) ORDER BY info_date DESC";
			sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_state=?) AND (info_payfor=?) ORDER BY info_date DESC";			
			params=new Object[3];
			params[0]=Integer.valueOf(infoType);
			params[1]=stateType;
			params[2]=payforType;					
		}else if(stateType.equals("all")&&payforType.equals("all")){		//同时选择了“付费状态”与“审核状态”中的“全部”选项
			mark="2";
			sqlall="SELECT * FROM tb_info WHERE (info_type=?) ORDER BY info_date DESC";
			sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) ORDER BY info_date DESC";			
			params=new Object[1];
			params[0]=Integer.valueOf(infoType);
		}else if(payforType.equals("all")){									//选择了“付费状态”中的“全部”选项,“审核状态”选项任意
			mark="3";
			sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_state=?) ORDER BY info_date DESC";
			sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_state=?) ORDER BY info_date DESC";
			params=new Object[2];
			params[0]=Integer.valueOf(infoType);
			params[1]=stateType;
		}
		else if(stateType.equals("all")){  									//选择了“审核状态”中的“全部”选项,“付费状态”选项任意
			mark="4";
			sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_payfor=?) ORDER BY info_date DESC";
			sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_payfor=?) ORDER BY info_date DESC";
			params=new Object[2];
			params[0]=Integer.valueOf(infoType);
			params[1]=payforType;
		}	


分页查询:

要计算此时传入的页码,对应分页应显示什么

		String strCurrentP=request.getParameter("showpage");
		String gowhich="admin_ListShow.action";
		
		OpDB myOp=new OpDB();
		CreatePage createPage=myOp.OpCreatePage(sqlall, params,perR,strCurrentP,gowhich);			//调用OpDB类中的OpCreatePage()方法计算出总记录数、总页数,并且设置当前页码,这些信息都封装到了createPage对象中
		
		int currentP=createPage.getCurrentP();		//根据传来的页码,计算出当前页数
		if(currentP>1){		//第一页已经查出来了,大于1时才去查后边的
			int top=(currentP-1)*perR;	//每次要查的第一条 = (现在所处页数-1)X 每页显示数量
			if(mark.equals("1")){		//mark是之前筛选项的排列组合
				sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_payfor = ?) AND (info_state = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_payfor = i.info_payfor) AND (info_state = i.info_state) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";
			}
			else if(mark.equals("2")){
				sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";
			}
			else if(mark.equals("3")){
				sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_state = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_state = i.info_state) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";
			}
			else if(mark.equals("4")){
				sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_payfor = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_payfor = i.info_payfor) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";
			}				
		}


查询组装好的sql,准备向显示页面传输结果集:

		List adminlistshow=myOp.OpListShow(sqlsub, params); //执行组装好的sql查询
		request.setAttribute("adminlistshow",adminlistshow); //单个信息的结果集
		request.setAttribute("createpage",createPage);	//分页信息




三:listShow查询结果

准备遍历刚才的结果集

 <s2:set name="listshow" value="#request.adminlistshow"/>


遍历request里的结果

结果集里装的是一个一个单独的信息,里边有对应的该信息的id、发布时间、是否付费、是否审核通过等概要信息

这儿的显示主要是靠struts标签传递传递查询信息,标志是id

<s2:iterator status="status" value="listshow">
                                <s2:if test="#status.odd">
                                    <tr height="30"></s2:if>
                                <s2:else>
                                    <tr height="30" bgcolor="#F9F9F9"></s2:else>
                                        <td align="center"><b><s2:property value="#status.index+1"/></b></td>
                                        <td style="text-indent:10"><s2:property value="id"/></td>
                                        <td style="text-indent:5"><a href="admin_CheckShow.action?checkID=<s2:property value='id'/>"><s2:property value="getSubInfoTitle(17)"/></a></td>
                                        <td align="center"><s2:property value="infoDate"/></td>
                                        <td align="center"><s2:if test="infoPayfor==1">是</s2:if><s2:else>否</s2:else></td>
                                        <td align="center"><s2:if test="infoState==1"><font color="red">是</font></s2:if><s2:else><b><font color="blue">否</font></b></s2:else></td>
                                        <td align="center"><a href="admin_CheckShow.action?checkID=<s2:property value='id'/>">√审核</a></td>
                                        <td align="center"><a href="admin_Delete.action?deleteID=<s2:property value='id'/>" οnclick="return really()">×删除</a></td>
                                    </tr>
                            </s2:iterator>


getSubInfoTitle(17)是最多显示17个字的标题

	public String getSubInfoTitle(int len){
		if(len<=0||len>this.infoTitle.length())
			len=this.infoTitle.length();
		return this.infoTitle.substring(0,len);		
	}





这样就按筛选条件把信息汇总成列表显示出来了,靠超链接就能进入某一条信息,或审核,或删除。

具体操作后边分析




























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值