以管理员身份登陆之后,就进入了后台信息的显示和审核界面。
显示显示出下拉菜单和单选按钮,组合出筛选条件,按筛选条件提交后显示该条件下的全部信息。
一:筛选选项
登录后显示边栏上筛选选项:
先是提交到新的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); //分页信息
准备遍历刚才的结果集
<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);
}
这样就按筛选条件把信息汇总成列表显示出来了,靠超链接就能进入某一条信息,或审核,或删除。
具体操作后边分析