jsp页面通过ajax向后台传参实现收藏功能

原创 2017年03月04日 21:58:59

好久没写文章,之前的项目转成毕设了所以又逼着自己推了推进度。
这次主要是填上次的坑。
上一篇写到了做的web页面用于展示。但是还有很多问题没有解决,比如分页显示,比如如何将标记的结果传给后台。这次写一写怎么实现这些功能。
先放效果,这个下面是读取数据库进行分页显示。
这里写图片描述
另一个功能是通过ajax给后台数据库添加数据,当你勾选任何一个checkbox,无论点击上一页下一页还是跳转都能把勾选的id号传给后台。
下面先简单讲一下分页,后台代码很简单,在写的disDAO里面负责从数据库提取数据,写一个方法public ArrayList display(int pageNum)返回这一页的菜谱即可。
后台我一直都会写其实是前端把我难住了,查了一下用这种写法,url传参数,一个是用户id一个是page页码(我知道该用cookie的以后再填坑吧)
http://localhost:8079/rec_sys.jsp?page=15&id=1
上一页下一页和跳转在前端怎么写呢?用JavaScript写,window.location.href就是在js里面跳转页面,参数就写在后面因为是get方法?后面就是参数

function jumpTo(maxPage){
            like();
            var page = document.getElementById("jump").value;
            if(page > maxPage || page < 1 ) {
                alert('请输入正确的页码!');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+page+"&id="+<%=id%>;
            }

        }
        function prePage(){
            like();
            var page = <%=pagenum%>;
            if(page == 1 ) {
                alert('已经到达第一页');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+(page-1)+"&id="+<%=id%>;
            }
        }
        function nextPage(){
            like();
            var page = <%=pagenum%>;
            if(page == <%=totalpage%> ) {
                alert('已经到达最后一页');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+(page+1)+"&id="+<%=id%>;
            }
        }

接下来是重点,我不知道ajax怎么写。
上网查了代码发现我踩了个坑,$这个函数IDEA不识别,我也不知道怎么回事浏览器调试的时候都不知道为啥,花了好久才知道不是js原生的,是jquery库里面的。。。
加了下面一句就能引入jquery库了

    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>

我的第一列是这样写的

            <td><input type = "checkbox"  value ='<%=re.getId() %>' name="like" /></td>

然后找到所有的选中的checkbox,得到value值就知道喜欢的菜谱id了,然后ajax传入后台。
把下面这个函数放到其他按钮按下的执行的函数里面,无论按那个按钮都会触发了。

function like(){//这个方法是将DOM对象里面名字为like的都找出来.然后被选中的加入到json传递.用ajax交互
            var list =new Array();
            var check=document.getElementsByName("like");
            for(var i=0;i<check.length;i++){
                if(check[i].checked==true){//检查checkbox是否已选中
                    list.push(check[i].value);
                }
            }
            $.ajax({//通过ajax传给一个servlet处理
                type:"POST", //请求方式
                url:"/likeList", //请求路径
                data:{"list":list,
                    "id":<%=id
                %>},
                traditional: true,//加上这个就可以传数组
                dataType : 'json',
                success:function(result){
                }
            });
        }

关于如何传数组给后台参考了文章:http://blog.csdn.net/yhj19920417/article/details/48690439

下面放上这个jsp页面的所有代码:

<%@ page import="com.sun.dao.DisDAO" %>
<%@ page import="com.sun.vo.RecipeVo" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: sunyang
  Date: 2016/12/8
  Time: 下午1:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>推荐系统</title>
</head>
<body>
<%  String id =request.getParameter("id");
    int pagenum=Integer.parseInt(request.getParameter("page"));
    System.out.println(pagenum);
%>

<%  DisDAO dd=new DisDAO();
    ArrayList<RecipeVo> list=dd.display(pagenum);
    int totalpage=dd.gettotalPage();
%>
<html>
<head>
    <style type = "text/css">
        td{

            width:60px;
        }
    </style>
    <script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>

    <script type="text/javascript">

        function jumpTo(maxPage){
            like();
            var page = document.getElementById("jump").value;
            if(page > maxPage || page < 1 ) {
                alert('请输入正确的页码!');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+page+"&id="+<%=id%>;
            }

        }
        function prePage(){
            like();
            var page = <%=pagenum%>;
            if(page == 1 ) {
                alert('已经到达第一页');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+(page-1)+"&id="+<%=id%>;
            }
        }
        function nextPage(){
            like();
            var page = <%=pagenum%>;
            if(page == <%=totalpage%> ) {
                alert('已经到达最后一页');
                return;
            }else {
                window.location.href="rec_sys.jsp?page="+(page+1)+"&id="+<%=id%>;
            }
        }
        function like(){//这个方法是将DOM对象里面名字为like的都找出来.然后被选中的加入到json传递.用ajax交互
            var list =new Array();
            var check=document.getElementsByName("like");
            for(var i=0;i<check.length;i++){
                if(check[i].checked==true){//检查checkbox是否已选中
                    list.push(check[i].value);
                }
            }
            $.ajax({//通过ajax传给一个servlet处理
                type:"POST", //请求方式
                url:"/likeList", //请求路径
                data:{"list":list,
                    "id":<%=id
                %>},
                traditional: true,//加上这个就可以传数组
                dataType : 'json',
                success:function(result){
                }
            });
        }
        function reconmmend(){
            like();
            window.location.href="recommend?id="+<%=id%>;
        }
    </script>
</head>

<body>
<div id = "main">
    <table width="1000" border ="1" align = "center" style="border-collapse:collapse;">
        <tr align="center">
            <td colspan="8">
                食谱大全
            </td>
        </tr>
        <tr align="center">
            <td>感兴趣</td>
            <td>菜谱ID</td>
            <td>菜谱名称</td>
            <td width="400">做法</td>
            <td>特性</td>
            <td>提示</td>
            <td>调料</td>
            <td>原料</td>
        </tr>

        <%for(int i = 0 ; i<list.size();i++) {

            RecipeVo re = list.get(i);%>
        <tr align="center" >
            <td><input type = "checkbox"  value ='<%=re.getId() %>' name="like" /></td>
            <td><%=re.getId() %></td>
            <td><%=re.getName() %></td>
            <td width="400"><%=re.getZuofa() %></td>
            <td><%=re.getTexing() %></td>
            <td><%=re.getTishi() %></td>
            <td><%=re.getTiaoliao() %></td>
            <td><%=re.getYuanliao() %></td>
        </tr>
        <%
            }
        %>
    </table>

    <div id="pageControl" align="center">
        <!-- 上一页 按钮 -->
        <input type="button" value="上一页" id="prePage" onclick="prePage()" >

        <!-- 下一页 按钮 -->
        <input type="button" value="下一页" id="nextPage" onclick="nextPage()" >

        <!-- 直接跳转 --><%=totalpage%>页 当前<%=pagenum%>页 -向<input type="text" id="jump" /><input type="button" value="跳转" onclick="jumpTo(<%=totalpage%>)" />
    </div>

    <table align="center">
        <tr>
            <td><input type ="button" value ="推荐结果" onclick="reconmmend()"/></td>
        </tr>
    </table>
</div>
</body>
</html>
</body>
</html>
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

在jsp中运用ajax(简单入门)

由于ajax为我们带来太多的好处,所以在很多应用中我们都会优先选择这种技术,于是我也为之所吸引,现跟大家分享下一个简单的入门例子。 regist.jsp文件:一个简单的注册页面 注册页面 ...

ajax 点赞收藏功能

医院科室-专家咨询 /s/css/rmyy/dept.css"> /s/js/jquery-1.9.1.js"> /s/js/css...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

基本的JSP中调用Ajax与Servlet进行数据交互

首先创建jsp页面中  然后在页面中写入js代码! ">

商品收藏模块的功能设计实现

电商网站的商品收藏功能实现              商品收藏的功能描述:用户对一件商品重复的进行收藏与取消收藏操作。点击收藏,将商品收藏成功,并且图标变为   已收藏;点击已收藏,则取消对该商品的收...

利用Ajax发送HEAD请求读取服务器响应头部

Ajax笔记,参考自《Ajax+PHP程序设计实战详解》 Ajax发送请求的类型除了GET,POST外,还可以发送HEAD请求。作用在于读取服务器的响应头部而忽略其内容,通过读取响应头部可以得出Co...

解决input原本保存的内容不能修改,但可以添加的问题

时隔好多好多天,我又满血复活了,首先解决了一个大问题。刚到公司,领导给安排了一个小任务,是公司马上推出的项目用到的。一个文本框,里面有原来保存的手机号,现在点击修改按钮可以添加,但是不能删除原来保存的...

关于JSP页面间的传参问题

  • 2009年09月22日 21:18
  • 2KB
  • 下载

利用AJAX是想JSP页面的单个控件的后台校验

xml: %@taglib prefix="s" uri="/struts-tags"%>  String path = request.getContextPath(); ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jsp页面通过ajax向后台传参实现收藏功能
举报原因:
原因补充:

(最多只允许输入30个字)