在很多的网站上有很多不同的点赞,我不知道他们是怎么实现的,下面我来分享一下我写的点赞实现,共大家参考下,
这是我在一个项目抽取的代码,可能有些样式会发生变化,但是功能不会影响。
网页代码:
这个是根据数据库中是否可以点赞来限制能不能点的,strlist是从java后台返回的一个请求。在这里取出点赞数和文章点赞的编号做为参数到Ajax上
<span class="pull-right">
<c:choose>
<c:when test="${strlist.dzFlag==1}">
<a href="javascript:void(0)" onclick="praise('${strlist.id}','${strlist.dzCount}')"
class="btn btn-default btn-xs">
赞
<span id="praiseNo${strlist.id}">
${strlist.dzCount}
</span>
</a>
</c:when>
<c:otherwise>
<a href="javascript:void(0)" class="btn btn-default btn-xs">
赞
<span id="strategyPraiseNo">
${strlist.dzCount}
</span>
</a>
</c:otherwise>
</c:choose>
</span>
Ajax请求的Js脚本:
<script type="text/javascript">
function praise(recordNo, praiseCount) {
$.ajax({
url: '${ctx}/country/pointPraise',
type: 'POST',
data: {
'recordNo': recordNo
},
dataType: "JSON",
success: function(d) {
if (d.success) {
var strategyPraiseNo = parseInt(praiseCount) + 1;
$('#praiseNo' + recordNo).html(strategyPraiseNo)
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
bootbox.alert("无法连接服务器:" + textStatus);
}
});
}
</script>
Java代码:
Dao类接口层
<pre name="code" class="java">/**
* @Title: updateDzCount
* @Description:点击赞后更改赞的数量
* @param mapNo
* @author CHENJH
* @date 2015年6月27日
*/
public void updateDzCount(HashMap<String, Object> mapNo);
Dao类实现层
@Override
public void updateDzCount(HashMap<String, Object> mapNo) {
this.update("updateDzCount", mapNo);
}
service类接口层
/**
* @Title: updateDzCount
* @Description:点击赞后更改赞的数量
* @param recordNo
* @author CHENJH
* @date 2015年6月25日
*/
public boolean updateDzCount(HashMap<String, Object> mapNo);
service类实现层
@Override
public boolean updateDzCount(HashMap<String, Object> mapNo) {
logger.info("***** BlogServiceImpl.updateDzCount() method begin*****");
boolean flag = true;
try {
blogDao.updateDzCount(mapNo);
} catch (Exception e) {
logger.error("------updateDzCount error:", e);
e.printStackTrace();
return false;
}
logger.info("***** BlogServiceImpl.updateDzCount() method end*****");
return flag;
}
Action类处理层代码
/**
* @Title: pointPraise
* @Description: 修改文章点赞
* @author CHENJH
* @date 2015年6月27日
*/
@SkipCheck
@Action("pointPraise")
public void pointPraise() {
String recordNo = getParam("recordNo");// 获取文章信息编号
HashMap<String, Object> mapNo = getSessionValue("recordNoMap");// 得到文章点赞集合
Boolean bool = false;
if (mapNo != null) {
if (mapNo.get(recordNo) == null) {// 判断集合中是否存在改编号点赞
mapNo.put(recordNo, recordNo);
bool = true;
}
} else {// 未进行点赞
mapNo = new HashMap<String, Object>();
mapNo.put(recordNo, recordNo);
setSessionAttr("recordNoMap", mapNo);
bool = true;
}
if (bool) {// 可以点赞
mapNo.put("recordNo", recordNo);
// 点赞更新值
bool = blogService.updateDzCount(mapNo);
}
outputJsons("success", bool);
}
MyBatis3映射文件SQL语句
<!--文章点赞后修改数量-->
<update id="updateDzCount" parameterType="map">
update TAB_攻略表 set
点赞次数=((select 点赞次数 from TAB_攻略表 where 记录编号 = #{recordNo,jdbcType=VARCHAR})+1)
where 记录编号 = #{recordNo,jdbcType=VARCHAR}
</update>
注:项目采用Maven开发,
this.update("updateDzCount", mapNo);
上采用了封装的。