电商项目笔记之四:搜索功能的实现



一:前台

这个项目namespace分的比较多, 所以struts的form要指定

这个namespace就是struts.xml里package配置的namespace

提交按钮用了一个背景图片

<s:form action="product_findByName" method="post" namespace="/product">

<s:textfield name="name"></s:textfield><br>
<s:submit type="image" src="%{context_path}/css/images/index_09.gif" value="搜索"></s:submit>
</s:form>


二:action

因为之前分析过项目里find封装的非常好, 所以业务视线里只要组装一下传参就行了

find会根据川河泛型组装HQL的

	public String findByName() throws Exception {
		if(product.getName() != null){
			String where = "where name like ?";//查询的条件语句
			Object[] queryParams = {"%" + product.getName() + "%"};//为参数赋值
			pageModel = productDao.find(pageNo, pageSize, where, queryParams );//执行查询方法
		}
		image.put("url", "04.gif");
		return LIST;//返回列表首页
	}
这里边先检查了一下传值是否为空 ,为空也并不是错误 因为直接点网页上的"搜索" 就去显示最新商品好了
image是一个Map ,这个map存储了跳转后的背景图片, 这个情况下 主页的主显示区的背景图片被设置成"搜索结果是XX"相关的图案




三:处理空搜索

这是组装HQL时候的语句,

String hql = new StringBuffer().append("from ")

.append(where == null ? "" : where)
如果搜索的内容是空 也没有问题, 其他选项比如 class , 排序等仍然生效


查完之后顺便把分页也一起做了:

list = query.setFirstResult(getFirstResult(pageNo, maxResult))//设置分页起始位置
								.setMaxResults(maxResult)//设置每页显示的记录数
								.list();//将查询结果转化为List对象

这个是查找出来的总数:

hql = new StringBuffer().append("select count(*) from ")//添加hql语句

交给page类记录总数, 其余的分页信息会在用的时候, 由page生成

pageModel.setTotalRecords(totalRecords);//设置总记录数



四:结果的分页显示

搜索结果的显示页中先准备好各个页码的数值:

</s:url> <s:url var="next" action="product_list" namespace="/admin/product">
	<s:param name="pageNo" value="pageModel.pageNo+1"></s:param>
</s:url> 
页面最下边包含分页的显示页面
<s:include value="/WEB-INF/pages/common/page.jsp"></s:include>
最后调用之前准备的数值, 显示成链接
<s:if test="pageModel.pageNo > 1">
		<a href="${first}">首页</a> <a href="${previous}">上一页</a>
	</s:if>
	<s:else>
		首页 上一页
	</s:else>
	<SPAN style="color: red;">
		 [<s:property value="pageModel.pageNo"/>] 
	</SPAN>
	<s:if test="pageModel.pageNo < pageModel.bottomPageNo">
		<a href="${next}">下一页</a> <a href="${last}">尾页</a>
	</s:if>
	<s:else>
		下一页 尾页
	</s:else>











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值