<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/
$(document).ready(function() {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var txt = "";
var newsList = JSON.parse(xmlhttp.responseText);
for(var i=0;i<newsList.length;i++){
txt += "<div>" +
"<div class=\"Fimg\">" + newsList[i].img + "</div>";
txt += "<div class=\"Ftitle\"><a href=\"/" + newsList[i].id + "\">" + newsList[i].title + "</a></div>";
txt += "</div>";
}
$("#newsforyou").html(txt);
}
}
xmlhttp.open("GET","/foryou",true);
xmlhttp.send();
});
/*]]>*/
</script>
<body>
<div class="foryou" th:fragment="foryou">
<p class="wnqj">为你推荐</p>
<div id="newsforyou"></div>
</div>
</body>
推荐页面,在网页载入的时候去调方法,载入数据。
public class StringTool {
/**
* 特定形式的字符串转化为Map
* @param s "label=value,label=value,label=value,···"形式的字符串
* @return
*/
public Map<String,Integer> StringToMap(String s){
List<Map<String,Integer>> resultlist = new ArrayList<Map<String,Integer>>();
List<String> stringList = Arrays.asList(s.split(","));
Map<String,Integer> map = new HashMap<>();
for(int i=0;i<stringList.size();i++){
List<String> list = Arrays.asList(stringList.get(i).split("="));
map.put(list.get(0),Integer.parseInt(list.get(1)));
resultlist.add(map);
}
return map;
}
/**
* Map加List
* @param map {"AAA":1,"BBB":2,"CCC":3}
* @param list {BBB,DDD}
* @param value 同一个Key加多少
* @return {"AAA":1,"CCC":3,"BBB":3,"DDD":1}
*/
public Map<String,Integer> MapAddList(Map<String,Integer> map,List<String> list,Integer value){
for(int i = 0;i<list.size();i++){
String label = list.get(i).toString();
if(map.get(label)!=null){
map.put(label,map.get(label)+value);
}else{
map.put(label,value);
}
}
return map;
}
/**
*
* @param s1 用户喜好字段
* @param s2 新闻类型字段
* @param value 加分
* @return 同类型加分,没有的类型增加。
*/
public String typeAdd(String s1,String s2,Integer value){
String s;
Map<String,Integer> map = StringToMap(s1);
List<String> list = Arrays.asList(s2.split(","));
Map<String,Integer> resultmap = MapAddList(map,list,value);
s = resultmap.toString();
//去掉头尾{}和所有空格
s = s.substring(1,s.length());
s = s.substring(0,s.length()-1);
s = s.replaceAll(" ","");
return s;
}
}
写个工具类,处理喜好字符串,以便操作。
在用户点击新闻和评论的方法里加上以下代码
//用户喜好加分
if(httpSession.getAttribute("user")!=null){
User user = (User) httpSession.getAttribute("user");
StringTool stringTool = new StringTool();
user.setPreference(stringTool.typeAdd(user.getPreference(),news.getType(),1));
userService.saveUser(user);
}
记得在用户注册时给予默认喜好u.setPreference("明星=1,时尚=1,影视=1,宠物=1,生活=1");
@RequestMapping(value = "/foryou")
@ResponseBody
public Object foryou(HttpSession httpSession){
User user = (User)httpSession.getAttribute("user");
StringTool stringTool = new StringTool();
Map<String,Integer> map = stringTool.StringToMap(user.getPreference());
if(map.size()<10) {
return "现在还不知道你的喜好,再多看看新闻吧。";
}
map.remove("明星");
map.remove("时尚");
map.remove("影视");
map.remove("宠物");
map.remove("生活");
//将Map转化为List集合,List采用ArrayList
List<Map.Entry<String, Integer>> list_Data = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
//通过Collections.sort(List I,Comparator c)方法进行排序
Collections.sort(list_Data,new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getValue().compareTo(o1.getValue()));
}
});
List<News> newsList = new ArrayList<>();
for(int c=0;c<list_Data.size();c++){
newsList.addAll(newsService.getAllNewsHaveLabel(0, 5, list_Data.get(c).getKey()).getContent());
for (int i = 0; i < newsList.size() - 1; i++) {
for (int j = newsList.size() - 1; j > i; j--) {
if (newsList.get(j).equals(newsList.get(i))) {
newsList.remove(j);
}
}
}
if(newsList.size()>5){
break;
}
}
PreviewDeal previewDeal = new PreviewDeal();
newsList = previewDeal.Deal(newsList);
return newsList;
}
至此,网站大致就写完了,等中期检查看看老师有什么问题吧,有改动再更新。