旅游线路功能
用户是否收藏
判断当前登录用户是否收藏过该线路
当页面加载完成后,发送ajax请求,获取用户是否收藏的标记。
根据标记,展示不同的按钮样式,
编写代码
后台代码
Service
FavoriteDao
public interface FavoriteDao {
/**
* 根据rid和uid查询收藏信息
* @param rid
* @param uid
* @return
*/
public Favorite findByRidAndUid(int rid,int uid);
}
public class FavoriteDaoImpl implements FavoriteDao {
//使用template去执行sql
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@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();
}
//如果像之前那样直接返回的话,如果为null会报错,所以在这里这样使用,过后通过判断是否为null
return favorite;
}
}
FavoriteService
public interface FavoriteService {
/**
* 判断是否收藏
* @param rid
* @param uid
* @return
*/
//因为从rid是从页面上获取的,所以都是字符串类型的,所以是字符串
public boolean isFavorite(String rid,int uid);
}
public class FavoriteServiceImpl implements FavoriteService {
private FavoriteDao favoriteDao = new FavoriteDaoImpl();
@Override
public boolean isFavorite(String rid, int uid) {
Favorite favorite = favoriteDao.findByRidAndUid(Integer.parseInt(rid), uid);
return favorite != null;//如果对象有值,则为true,反字则为false
}
}
Servlet
- routeServlet
public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取线路id
String rid = request.getParameter("rid");
//获取当前用户登录的用户 user
User user = (User) request.getSession().getAttribute("user");
int uid;//用户id
if (user == null){
//用户尚未登录,因为0号id也并不存在,所以也查询不到记录
uid = 0;
}else {
//用户已经登录
uid = user.getUid();
}
//3.调用FavoriteService查询是否收藏
boolean flag = favoriteService.isFavorite(rid, uid);
//4.写回客户端
writeValue(flag,response);
}
前台代码
- route_detail.html
实现收藏过后样式的改变
$(function (){
/*
<a class="btn" id="favorite"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>
<a class="btn already" disabled="disabled"><i class="glyphicon glyphicon-heart-empty"></i>点击收藏</a>
*/
//发送请求,判断用户是否收藏
var rid = getParameter("rid");
$.get("route/isFavorite",{rid:rid},function (flag){
if (flag){
//用户已经收藏过
//设置收藏按钮的样式
$("#favorite").addClass("already");
$("#favorite").prop("disabled",disabled);
}else {
//用户没有收藏
}
});
});
显示收藏次数
FavoriteDao
public interface FavoriteDao {
/**
* 根据rid和uid查询收藏信息
* @param rid
* @param uid
* @return
*/
public Favorite findByRidAndUid(int rid,int uid);
/**
* 根据rid查询收藏次数
* @param rid
* @return
*/
int findCountByRid(int rid);
}
@Override
public int findCountByRid(int rid) {
String sql = "select count(*) from tab_favorite where rid = ?";
return template.queryForObject(sql,Integer.class,rid);
}
Service
//设置总页数 = 总记录数/每页显示条数
int totalPage = totalCount % pageSize == 0 ? totalCount/pageSize : (totalCount/pageSize)+1;
pb.setTotalPage(totalPage);
route_detail.html
$("#favoriteCount").html("已收藏"+route.count+"次");