「ダークホーストラベルネットワーク」総合ケースDay04
-
観光ルート収集機能
14.1分析
14.1.1現在ログインしているユーザーがその行をブックマークしたかどうかを確認しますページが読み込まれたら、ajaxリクエストを送信して、ユーザーがお気に入りかどうかのマークを取得します
マークに応じて、さまざまなボタンスタイルを表示します
14.2コードの記述
14.2.1背景コード
RouteServlet
public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1. 获取线路id String rid = request.getParameter("rid"); //2. 获取当前登录的用户 user User user = (User) request.getSession().getAttribute("user"); int uid;//用户id if(user == null){ //用户尚未登录 uid = 0; }else{ //用户已经登录 uid = user.getUid(); } //3. 调用FavoriteService查询是否收藏 boolean flag = favoriteService.isFavorite(rid, uid); //4. 写回客户端 writeValue(flag,response); }
FavoriteService
@Override public boolean isFavorite(String rid, int uid) { Favorite favorite = favoriteDao.findByRidAndUid(Integer.parseInt(rid), uid); return favorite != null;//如果对象有值,则为true,反之,则为false }
FavoriteDao
@Override public Favorite findByRidAndUid(int rid, int uid) { Favorite favorite = null; try { String sql = " select * from tab_favorite where rid = ? and uid = ?"; favorite = template.queryForObject(sql, new BeanPropertyRowMapper<Favorite>(Favorite.class), rid, uid); } catch (DataAccessException e) { e.printStackTrace(); } return favorite; }
14.2.2フロントデスクコード
route_detail.html
$(function () { //发送请求,判断用户是否收藏过该线路 var rid = getParameter("rid"); $.get("route/isFavorite",{ rid:rid},function (flag) { if(flag){ //用户已经收藏过 //<a class="btn already" disabled="disabled"> //设置收藏按钮的样式 $("#favorite").addClass("already"); $("#favorite").prop("disabled",disabled); }else{ //用户没有收藏 } }); });
14.3お気に入りの動的表示
フロント:
//设置收藏次数 $("#favoriteCount").html("已收藏"+route.count+"次");
舞台裏:
RouteService
@Override public Route findOne(String rid) { //1.根据id去route表中查询route对象 Route route = routeDao.findOne(Integer.parseInt(rid)); //2.根据route的id查询图片集合信息 List<RouteImg> routeImgList = routeImgDao.findByRid(route.getRid()); //2.2将集合设置到route对象 route.setRouteImgList(routeImgList); //3.根据route的sid(商家id)查询商家对象 Seller seller = sellerDao.findById(route.getSid()); route.setSeller(seller); //4.查询收藏次数 int count = favoriteDao.findCountByRid(route.getRid()); route.setCount(count); return route; }
FavoriteDao
@Override public int findCountByRid(int rid) { String sql = "SELECT COUNT(*) FROM tab_favorite WHERE rid = ?"; return template.queryForObject(sql,Integer.class,rid); }
14.4ボタンをクリックして、行をブックマークします
14.4.1分析:
14.4.2エンコーディング
フロントデスクコード
$(function () { // 发送请求,判断用户是否收藏过该线路 var rid = getParameter("rid"); $.get("route/isFavorite",{ rid:rid},function (flag) { if(flag){ // 用户已经收藏过 //<a class="btn already" disabled="disabled"> //设置收藏按钮的样式 $("#favorite").addClass("already"); $("#favorite").attr("disabled","disabled"); //删除按钮的点击事件 $("#favorite").removeAttr("onclick"); }else{ // 用户没有收藏 } }); }); //点击收藏按钮触发的方法 function addFavorite(){ var rid = getParameter("rid"); //1. 判断用户是否登录 $.get("user/findOne",{ },function (user) { if(user){ //用户登录了 //添加功能 $.get("route/addFavorite",{ rid:rid},function () { //代码刷新页面 location.reload(); }); }else{ //用户没有登录 alert("您尚未登录,请登录"); location.href="http://localhost/travel/login.html"; } }) }
背後にあるコード
RouteServlet
/** * 添加收藏 * @param request * @param response * @throws IOException */ public void addFavorite(HttpServletRequest request, HttpServletResponse response) throws IOException { //1.获取线路rid String rid = request.getParameter("rid"); //2.获取当前登录用户 User user = (User) request.getSession().getAttribute("user"); int uid;//用户id if(user == null){ //用户尚未登录 return ; }else{ //用户已经登录 uid = user.getUid(); } //3.调用service添加 favoriteService.add(rid, uid); }
FavoriteService
@Override public void add(String rid, int uid) { favoriteDao.add(Integer.parseInt(rid),uid); }
FavoriteDao
@Override public void add(int rid, int uid) { String sql = "insert into tab_favorite values(?,?,?)"; template.update(sql,rid,new Date(),uid); }