分析
- 业务分析
单击收藏时,需要用户账号进行存储,所以需要进行用户登录.
- 表分析
用户存在与收藏表与为一对多,所以对线路进行收藏,在收藏表中进行添加即可.
代码实现
- route_detail.html中js
//收藏状态刷新
function flush() {
var rid = getParameter("rid");
$.post("route/siFavorite", {rid: rid}, function (flag) {
// <!--<a class="btn already" disabled="disabled"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>-->
//设置收藏按钮样式
var favorite = $("#favorite");
if (flag) {
favorite.addClass("already");
favorite.attr("disabled", "disabled")
}
})
}
//添加收藏
function addFavorite() {
var rid = getParameter("rid");
$.post("user/findOne", {}, function (user) {
//返回数据进行处理
if (user) {
$.post("route/addFavorite", {rid: rid}, function () {
flush()//收藏页面刷新
})
} else {
//给出提醒
alert("您尚未登陆,请登录");
//跳转到登录页面
location.href = "http://localhost/travel/login.html";
}
})
}
对收藏按钮进行样式的改变,在收藏成功与失败时进行不同的样式控制.
- RouteServlet
/**
* 添加收藏信息
*
* @param request 请求
* @param response 响应
*/
public void addFavorite(HttpServletRequest request, HttpServletResponse response) {
int rid = Integer.valueOf(request.getParameter("rid"));
//在session中获取user
User user = (User) request.getSession().getAttribute("user");
int uid;
//判断user是否存在
if (user == null) {
//用户尚未登陆
return;
} else {
//用户已经登陆
uid = user.getUid();
}
//调用service方法
favoriteService.add(rid, uid);
}
先进行用户是否登陆进行校验,当用户存在时调用service方法,不存在时不返回数据(防止恶意访问).
- FavoriteService
@Override
public void add(int rid, int uid) {
favoriteDao.add(rid, uid);
}
进行简单调用dao方法,不需要对数据进行处理.
- FavoriteDao
@Override
public void add(int rid, int uid) {
String sql = "insert into tab_favorite values(?,?,?)";
template.update(sql, rid, new Date(), uid);
}
对tab_favorite进行插入操作