hibernate 查询两个时间段的数据和分页实现
在项目中要用到查询两个时间段的数据
1.在页面里
<table>
<tr>
<td class="STYLE1"><div align="center">
出行开始日期<input type="text" id="start" value="${start}"/>---
出行结束日期<input type="text" id="end" value="${end}" />
</div></td>
<td class="STYLE1"><div align="center" id="search">
<img src="tab/images/113.png" width="14" height="14" />
<a href="" style="text-decoration: none;" onclick="a(this)" >搜索</a>
</div>
</td>
</tr>
</table>
2.用js获取两个文本框中的值并传给action
<SCRIPT type="text/javascript">
function a(o){
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
o.href = "showUserMade?start="+start+"&&end="+end+"";
}
</SCRIPT>
3.在action中接收页面传过来的start和end的值,get和set一下
public class ShowUserMadeAction extends ActionSupport {
private int page; //接受传递的页码参数
private String start;
private String end;
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
private PageResultSet<Usermade> pageResultSet;
private IShowUserMadeService showUserMadeService;
public IShowUserMadeService getShowUserMadeService() {
return showUserMadeService;
}
public void setShowUserMadeService(IShowUserMadeService showUserMadeService) {
this.showUserMadeService = showUserMadeService;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public PageResultSet<Usermade> getPageResultSet() {
return pageResultSet;
}
public void setPageResultSet(PageResultSet<Usermade> pageResultSet) {
this.pageResultSet = pageResultSet;
}
public String showUserMade() {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("start", start);//放在request作用域里,这样就可在jsp页面通过${"start"}取到值
request.setAttribute("end", end);
this.pageResultSet =showUserMadeService.queryByPage(25, page,start,end);//设置分页个数,并传值给service
return SUCCESS;
}
}
4.在service层里根据取到的开始和结束的值进行数据库查询
public class ShowUserMadeServiceImpl implements IShowUserMadeService {
private IShowUserMadeDao showUserMadeDao;
public IShowUserMadeDao getShowUserMadeDao() {
return showUserMadeDao;
}
public void setShowUserMadeDao(IShowUserMadeDao showUserMadeDao) {
this.showUserMadeDao = showUserMadeDao;
}
@Override
public PageResultSet<Usermade> queryByPage(int pageSize, int page,String start,String end) {
String hql="from Usermade u where 1=1";
if(null!=start && !"".equals(start.trim())){
hql=hql+" and u.beginDate>='"+start+"'";
}
if(null!=end && !"".equals(end.trim())){
hql=hql+" and u.endDate<='"+end+"'";
}
int totalRow =showUserMadeDao.queryRowCount(hql);
PageInfo pageinfo = new PageInfo(totalRow, pageSize, page);
List<Usermade> list =showUserMadeDao.queryByPage(hql, pageinfo.getBeginIndex(), pageinfo.getPageSize());
PageResultSet<Usermade> pageResultSet = new PageResultSet<Usermade>();
pageResultSet.setList(list);
pageResultSet.setPageInfo(pageinfo);
return pageResultSet;
}
}
5.在页面传递页码的地方加上start 和end的参数,这样可以支持分页,并且输入框中的值保持原来输入的值
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="line_table">
<tr>
<td align="right" class="STYLE4">
一共 <s:property value="pageResultSet.pageInfo.totalRow"/> 记录
页码: <s:property value="pageResultSet.pageInfo.currentPage" /> / <s:property value="pageResultSet.pageInfo.totalPage"/>
<s:if test="pageResultSet.pageInfo.bof">
首页 第一页
</s:if>
<s:else>
<a href="showUserMade?page=1&&start=${start}&&end=${end}">首页</a> <a href="showUserMade?page=<s:property value="pageResultSet.pageInfo.currentPage-1"/>&&start=${start}&&end=${end}">上一页</a>
</s:else>
<s:if test="pageResultSet.pageInfo.eof">
下一页 末页
</s:if>
<s:else>
<a href="showUserMade?page=<s:property value="pageResultSet.pageInfo.currentPage+1"/>&&start=${start}&&end=${end}">下一页</a> <a href="showUserMade?page=<s:property value="pageResultSet.pageInfo.totalPage"/>&&start=${start}&&end=${end}">末页</a>
</s:else>
</td>
</tr>
</table>
</td>
</tr>
</table>
ok了