多条件查询 仿淘宝URL传参方式
---恢复内容开始---
最近项目在做一个电商网站,网站涉及到前后台交互的多条件查询,类似于淘宝的多条件查询,图片如下
此类查询主要涉及到的问题有:
1.如何记忆查询参数
2.如何前后台传值
3.中文处理
。
解答:
1:通过从后台返回之前查询参数(网上有在session中记忆参数,也有用数组记忆,这里我选用了淘宝的方式:url返回参数记忆)
2:通过url方式传值,并且需要注意拼接格式
3:前台进行utf8编码,后台进行utf8解码(特别注意:之前记忆的参数通过后台再返回前台,一定要对参数进行解码在编码后进行返回,否则会出现乱码,不过也有可能是我代码的问题)
详细代码如下:
一、前台查询框展示代码:(查询条件都是从后台拉取的集合)
<div class = "category">
<div>
<c:if test="${param.name ne null }">${param.name }</c:if>
<a ><c:if test="${requestScope.content eq '' or requestScope.content eq null }"><h3>
全部商品 - 商品筛选</h3></c:if>
<c:if test="${requestScope.content ne '' and requestScope.content ne null }">
<h3>
${requestScope.content } - 商品筛选</h3></c:if></a>
</div>
<!-- <dl style=" border-color: #E2E2E2; border-image: none; border-width: 0 1px 1px;width: 900px;padding-left: 10px; padding: 10px;" id="manyC" class="manyC"> -->
<ul class="select">
<li class="select-list">
<c:forEach items="${typePropertys }" var="pro" varStatus="stat" begin="0" end="20">
<dl id="select${stat.index+1}">
<dt style="float:left;">${pro.propertyName }:</dt>
<dd class="select-all selected">
<a href="javascript:void(0);" onclick="quanbu(${stat.index})">全部</a></dd>
<c:forEach items="${fn:split(pro.content,\",\") }" var="proName" varStatus="stat2">
<dd>
<a id="${stat.index}${stat2.index}" href="javascript:void(0);" onclick="bb(${stat.index},${stat2.index},'${proName }')">${proName }</a>
</dd>
</c:forEach>
</dl>
</c:forEach>
</li>
</ul>
<%--通过记忆的property来刷新页面时显示之前已筛选的property --%>
<script type="text/javascript">
var propertystring = '<%=request.getAttribute("property")%>';
<%--","拆分字符串,一级拆分 --%>
var arg1 = propertystring.split(",");
for(var i=0 ; i<arg1.length ; i++){
<%--":"拆分字符串,二级拆分 --%>
var arg2 = arg1[i].split(":")[0];
$("#"+arg2).parent().addClass("selected").siblings().removeClass("selected");
}
</script>
</div>
二、涉及到的JS方法(重点)
显示之前记忆的查询条件
<script type="text/javascript">
var propertystring = '<%=request.getAttribute("property")%>';
<%--","拆分字符串,一级拆分 --%>
var arg1 = propertystring.split(",");
for(var i=0 ; i<arg1.length ; i++){
<%--":"拆分字符串,二级拆分 --%>
var arg2 = arg1[i].split(":")[0];
$("#"+arg2).parent().addClass("selected").siblings().removeClass("selected");
}
</script>
点击新的查询条件事件
<script type="text/javascript">
function bb(num,con,proname){
proname = encodeURI(proname);
proname = encodeURI(proname);
var propertystring = '<%=request.getAttribute("property")%>';
var newstring = "";
var notnullstring = "";
var flag = 0;
if(propertystring != "null" && propertystring != ""){
var arg1 = propertystring.split(",");
<%-- 当选择同行时,进行修改,当选择不同行时,先判断整个for循环中有无同行,循环完无同行添加--%>
for(var i=0 ; i<arg1.length ; i++){
var arg2 = arg1[i].split(":")[0].split("")[0];
//在同一排时,替换同一排,标志位置为1,否则为添加,标志位为0
if(parseInt(arg2) == parseInt(num)){
var newId = num+''+con;
arg1[i] = newId + '' + ":" + proname;
flag = 1;
}
}
for(var j=0 ; j<arg1.length ; j++){
if(j==0){
notnullstring += arg1[j];
}
else{
notnullstring += ","+arg1[j];
}
}
if(flag == 0){
var newId = num+''+con;
newstring = ","+newId + '' + ":" + proname;
notnullstring += newstring ;
}
window.location.href = "<%=path %>/list/goodsList.html?sellType=1&order=0&pageNo=0&orderType=0&goodsCatId=<%=request.getAttribute("property")%>&property="+notnullstring;
}
else{
newstring = num+''+con+":"+proname;
window.location.href = "<%=path %>/list/goodsList.html?sellType=1&order=0&pageNo=0&orderType=0&goodsCatId=<%=request.getAttribute("property")%>&property="+newstring;
}
} function quanbu(num){
var notnullstring = "";
var propertystring = '<%=request.getAttribute("property")%>';
var flag = 0;
for(var i=0 ; i<arg1.length ; i++){
var arg2 = arg1[i].split(":")[0].split("")[0];
if(parseInt(arg2) == parseInt(num)){
arg1[i] = "";
}
}
for(var j=0 ; j<arg1.length ; j++){
if(j==0){
if(arg1[j] == ""){
notnullstring += "";
flag = 1;
}
else
notnullstring += arg1[j];
}
else{
if(arg1[j]=="")
notnullstring += "";
else {
if(flag == 0)
notnullstring += ","+arg1[j];
else {
notnullstring += arg1[j];
flag = 0;
}
}
}
}
window.location.href = "<%=path %>/list/goodsList.html?sellType=1&order=0&pageNo=0&orderType=0&goodsCatId=<%=request.getAttribute("property")%>&property="+notnullstring;
}
</script>
这里href调用的事html页,而html页有<s:action>方法,所以直接可以访问方法
三、后台方法
</pre><pre name="code" class="java"> if (property != null && !(property.equals(""))) {
String[] arg1 = property.split(",");
for (int i = 0; i < arg1.length; i++) {
String[] arg2 = arg1[i].split(":");
String beforeNum = arg2[0];
String afterText = URLDecoder.decode(
URLDecoder.decode(arg2[1], "utf-8"), "utf-8");
if(i<arg1.length-1){
ex_property += afterText + ",";
ex_propertyNum += beforeNum+",";
}
else {
ex_property += afterText;
ex_propertyNum += beforeNum;
}
}
String[] ex_arg1 = ex_property.split(",");
String[] ex_arg2 = ex_propertyNum.split(",");
for (int j = 0; j < ex_arg1.length; j++) {
if(j<ex_arg1.length-1)
return_property += ex_arg2[j]+":"+URLEncoder.encode(
URLEncoder.encode(ex_arg1[j], "utf-8"), "utf-8")+",";
else
return_property += ex_arg2[j]+":"+URLEncoder.encode(
URLEncoder.encode(ex_arg1[j], "utf-8"), "utf-8");
}
ServletActionContext.getRequest().setAttribute("property",
return_property);
}
这里return_property 为 需要重新返回到前台记忆的参数,ex_property为已解码的查询参数。
最后是CSS和相对不重要的JS
这里写死了点击样式条件数为7个....还不清楚如何动态确定点击样式
$(document).ready(function(){
$("#select1 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectA").remove();
} else {
var copyThisA = $(this).clone();
if ($("#selectA").length > 0) {
$("#selectA a").html($(this).text());
} else {
$(".select-result dl").append(copyThisA.attr("id", "selectA"));
}
}
});
$("#select2 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectB").remove();
} else {
var copyThisB = $(this).clone();
if ($("#selectB").length > 0) {
$("#selectB a").html($(this).text());
} else {
$(".select-result dl").append(copyThisB.attr("id", "selectB"));
}
}
});
$("#select3 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectC").remove();
} else {
var copyThisC = $(this).clone();
if ($("#selectC").length > 0) {
$("#selectC a").html($(this).text());
} else {
$(".select-result dl").append(copyThisC.attr("id", "selectC"));
}
}
});
$("#select4 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectD").remove();
} else {
var copyThisD = $(this).clone();
if ($("#selectD").length > 0) {
$("#selectD a").html($(this).text());
} else {
$(".select-result dl").append(copyThisD.attr("id", "selectD"));
}
}
});
$("#select5 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectE").remove();
} else {
var copyThisE = $(this).clone();
if ($("#selectE").length > 0) {
$("#selectE a").html($(this).text());
} else {
$(".select-result dl").append(copyThisE.attr("id", "selectE"));
}
}
});
$("#select6 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectF").remove();
} else {
var copyThisF = $(this).clone();
if ($("#selectF").length > 0) {
$("#selectF a").html($(this).text());
} else {
$(".select-result dl").append(copyThisF.attr("id", "selectF"));
}
}
});
$("#select7 dd").click(function () {
$(this).addClass("selected").siblings().removeClass("selected");
if ($(this).hasClass("select-all")) {
$("#selectG").remove();
} else {
var copyThisF = $(this).clone();
if ($("#selectG").length > 0) {
$("#selectG a").html($(this).text());
} else {
$(".select-result dl").append(copyThisG.attr("id", "selectG"));
}
}
});
$("#selectA").live("click", function () {
$(this).remove();
$("#select1 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectB").live("click", function () {
$(this).remove();
$("#select2 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectC").live("click", function () {
$(this).remove();
$("#select3 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectD").live("click", function () {
$(this).remove();
$("#select4 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectE").live("click", function () {
$(this).remove();
$("#select5 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectF").live("click", function () {
$(this).remove();
$("#select6 .select-all").addClass("selected").siblings().removeClass("selected");
});
$("#selectG").live("click", function () {
$(this).remove();
$("#select7 .select-all").addClass("selected").siblings().removeClass("selected");
});
$(".select dd").live("click", function () {
if ($(".select-result dd").length > 1) {
$(".select-no").hide();
} else {
$(".select-no").show();
}
});
});
CSS样式
.select li{list-style:none;padding:10px 0 5px 0px}
.select .select-list{border-bottom:#eee 1px dashed}
.select dl{zoom:1;position:relative;line-height:24px;}
.select dl:after{content:" ";display:block;clear:both;height:0;overflow:hidden}
.select dd{float:left;display:inline;margin:0 0 5px 5px;}
.select a{display:inline-block;white-space:nowrap;height:24px;padding:0 10px;text-decoration:none;color:#039;border-radius:2px;}
.select a:hover{color:#f60;background-color:#f3edc2}
.select .selected a{color:#fff;background-color:#CCCCCC}
.select-result dt{font-weight:bold}
.select-no{color:#999}
.select .select-result a{padding-right:20px;background:#f60 url("../img/close.gif") right 9px no-repeat}
.select .select-result a:hover{background-position:right -15px}
---恢复内容结束---
多条件查询 仿淘宝URL传参方式的更多相关文章
- ASP.NET 最全的POST提交数据和接收数据 —— (1) 用url传参方式
//1.对象提交,字典方式 //接口方:public ActionResult GetArry(Car model) public void PostResponse() { HttpWebReque ...
- 仿淘宝头像上传功能(三)——兼容 IE6 浏览器。
前两篇目录: 仿淘宝头像上传功能(一)——前端篇. 仿淘宝头像上传功能(二)——程序篇. 仿淘宝头像上传功能(三)——兼容 IE6 浏览器 之前的这两篇虽然实现了功能,但不兼容低版本浏览器,而且有些浏 ...
- Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片
Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- 仿淘宝左侧菜单导航栏纯Html + css 写的
这俩天闲来没事淘宝逛了一圈看到淘宝的左侧导航菜单做的是真心的棒啊,一时兴起,查了点资料抓了几个图片仿淘宝写了个css,时间紧写的不太好,大神勿喷,给小白做个参考 废话不多说先来个效果图 接下来直接上代 ...
- Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;
仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...
- 基于Bootstrap仿淘宝分页控件实现
.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...
- jquery仿淘宝规格颜色选择效果
jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...
- 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》
高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...
随机推荐
- Shell获取指定时间
时区基本知识 相差一个时区(经度15度)时间相差一小时.简单计算口诀:1.同一个时区的相差时间用减法,2.不同时区的相差时间用加法.3东加西减.例如一,东八区是8点,问东1区几点.根据上面口诀1,算: ...
- Vue.js项目脚手架构建
vue.js文档:https://cn.vuejs.org/v2/guide/ 参考这个或者参考菜鸟教程也可以,不过还是那句话官网权威. 我这个主要是看相关的学习视频搭建的. 一.环境准备 环境准备( ...
- tcpdump -i eth0 -n -vvv src or dst port 443
tcpdump -i eth0 -n -vvv src or dst port 443
- 【转】取模(mod)与取余(rem)的区别——Matlab学习笔记
昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem)是不同的,今天在网上具体查了一下: 通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于: 当 ...
- Linux 从网卡到TCP IP协议栈数据流跟踪与审计
前沿 在学代码审计,然后最近做Linux协议栈的审计,发现Linux不愧是一个久经考验的系统,本来以为可以找到个DoS的,结果发现其在TCP/IP协议栈的链路层实现,利用了各种技术,用来提高性能与安全 ...
- Euler:欧拉函数&素数筛
一.欧拉函数 欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示. 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数. 比如x=12,拆成质因数为12=2*2*3, ...
- HashMap 的实现原理
hashMap用了一个名字为table的数组:还有若干个名字为entry的链表.看hashMap是如何应用这些数据结构的.用插 入<key,value>举例:hashMap首先会通过key ...
- [拍摄]日本AVENIR 6-36mm老式变焦镜头拆解 型号SSL06036M
老式监控摄像头的变焦镜头,做工不错,拆了分享一下 品牌:AVENIR型号:SSL06036M光圈:1:1.2产地:日本焦距:6-36mm 外观 图片:QQ截图20141104125759.jpg 图片 ...
- BZOJ1178 APIO2009 会议中心 贪心、倍增
传送门 只有第一问就比较水了 每一次贪心地选择当前可以选择的所有线段中右端点最短的,排序之后扫一遍即可. 考虑第二问.按照编号从小到大考虑每一条线段是否能够被加入.假设当前选了一个区间集合\(T\), ...
- CF101D Castle 树形DP、贪心
题目传送门 题意:给出一个有$N$个点的树,你最开始在$1$号点,经过第$i$条边需要花费$w_i$的时间.每条边只能被经过$2$次.求出到达除$1$号点外所有点的最早时间的最小平均值.$N \leq ...