自定义过滤条件的实现方法可以有hibernate也可以用mybatis,很明显使用mybatis要方便得多。
以下是使用hibernate来实现自定义过滤条件的源代码:
public String show() {
forum = forumService.getById(id);
// 准备分页信息 v3
String hql = "FROM Topic t WHERE t.forum=? ";
List<Object> parameters = new ArrayList<Object>();
parameters.add(forum);
if (viewType == 1) { // 1 表示只看精华帖
hql += " AND t.type=? ";
parameters.add(Topic.TYPE_BEST);
}
if (orderBy == 1) { // 1 表示只按最后更新时间排序
hql += " ORDER BY t.lastUpdateTime " + (asc ? "ASC" : "DESC");
} else if (orderBy == 2) { // 2 表示只按主题发表时间排序
hql += " ORDER BY t.postTime " + (asc ? "ASC" : "DESC");
} else if (orderBy == 3) { // 3 表示只按回复数量排序
hql += " ORDER BY t.replyCount " + (asc ? "ASC" : "DESC");
} else { // 0 表示默认排序(所有置顶帖在前面,并按最后更新时间降序排列)
hql += " ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC, t.lastUpdateTime DESC";
}
PageBean pageBean = replyService.getPageBean(pageNum, pageSize, hql, parameters);
ActionContext.getContext().getValueStack().push(pageBean);
return "show";
}
2、JSP中的代码:
<s:form action="forum_show?id=%{id}">
<div id="TableTail">
<div id="TableTail_inside">
<table border="0" cellspacing="0" cellpadding="0" height="100%" align="left">
<tr valign=bottom>
<td></td>
<td>
<s:select name="viewType" list="#{0:'全部主题', 1:'全部精华贴'}"/>
<s:select name="orderBy" οnchange="onSortByChange(this.value)"
list="#{0:'默认排序(所有置顶帖在前面,并按最后更新时间降序排列)', 1:'只按最后更新时间排序', 2:'只按主题发表时间排序', 3:'只按回复数量排序'}"
/>
<s:select name="asc" list="#{false:'降序', true:'升序'}"/>
<input type="IMAGE" src="${pageContext.request.contextPath}/style/blue/images/button/submit.PNG" align="ABSMIDDLE"/>
</td>
</tr>
</table>
</div>
</div>
</s:form>