单击取不到值,错在哪里啊
来源:5-8 更新会员阅读状态
____xyz
2021-08-12 00:08:16

相关代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${book.bookName}</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,user-scalable=no">
<link rel="stylesheet" href="/resources/bootstrap/bootstrap.css">
<link rel="stylesheet" href="/resources/raty/lib/jquery.raty.css">
<script src="/resources/jquery.3.3.1.min.js"></script>
<script src="/resources/bootstrap/bootstrap.min.js"></script>
<script src="/resources/art-template.js"></script>
<script src="/resources/raty/lib/jquery.raty.js"></script>
<style>
.container {
padding: 0px;
margin: 0px;
}
.row {
padding: 0px;
margin: 0px;
}
.alert {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.col- * {
padding: 0px;
}
.description p {
text-indent: 2em;
}
.description img {
width: 100%;
}
.highlight {
background-color: lightskyblue !important;
}
</style>
<script>
$.fn.raty.defaults.path = '/resources/raty/lib/images';
$(function () {
$(".stars").raty({readOnly: true});
})
$(function () {
<#if memberReadState ??>
$("*[data-read-state='${memberReadState.readState}']").addClass("highlight");
</#if>
<#if !loginMember ??>
$("*[data-read-state],#btnEvaluation,*[data-evaluation-id]").click(function () {
//.modal是bootstrap提供的对话框函数,未登录情况下提示 需要登录
$("#exampleModalCenter").modal("show");
})
</#if>
})
<#if loginMember ??>
$("*[data-read-state]").click(function () {
var readState = $(this).data("read-state");//获取前端单击的阅读状态
$.post("/update_read_state",{
memberId:${loginMember.memberId},
bookId:${book.bookId},
readState:readState
}, function (json) {
if (json.code == "0") {
$("*[data-read-state]").removeClass("highlight");
$("*[data-read-state='" + readState + "']").addClass("highlight");
}
}, "json")
})
</#if>
</script>
</head>
<body>
<!--<div style="width: 375px;margin-left: auto;margin-right: auto;">-->
<div class="container ">
<nav class="navbar navbar-light bg-white shadow mr-auto">
<ul class="nav">
<li class="nav-item">
<a href="/">
<img src="https://m.imooc.com/static/wap/static/common/img/logo2.png" class="mt-1"
style="width: 100px">
</a>
</li>
</ul>
</nav>
<div class="container mt-2 p-2 m-0" style="background-color:rgb(127, 125, 121)">
<div class="row">
<div class="col-4 mb-2 pl-0 pr-0">
<img style="width: 110px;height: 160px"
src="${book.cover}">
</div>
<div class="col-8 pt-2 mb-2 pl-0">
<h6 class="text-white">${book.bookName}</h6>
<div class="p-1 alert alert-warning small" role="alert">
${book.subTitle}
</div>
<p class="mb-1">
<span class="text-white-50 small">${book.author}</span>
</p>
<div class="row pl-1 pr-2">
<div class="col-6 p-1">
<button type="button" data-read-state="1" class="btn btn-light btn-sm w-100">
<img style="width: 1rem;" class="mr-1"
src="https://img3.doubanio.com/f/talion/cf2ab22e9cbc28a2c43de53e39fce7fbc93131d1/pics/card/ic_mark_todo_s.png"/>想看
</button>
</div>
<div class="col-6 p-1">
<button type="button" data-read-state="2" class="btn btn-light btn-sm w-100">
<img style="width: 1rem;" class="mr-1"
src="https://img3.doubanio.com/f/talion/78fc5f5f93ba22451fd7ab36836006cb9cc476ea/pics/card/ic_mark_done_s.png"/>看过
</button>
</div>
</div>
</div>
</div>
<div class="row" style="background-color: rgba(0,0,0,0.1);">
<div class="col-2"><h2 class="text-white">${book.evaluationScore}</h2></div>
<div class="col-5 pt-2">
<span class="stars" data-score="${book.evaluationScore}"></span>
</div>
<div class="col-5 pt-2"><h5 class="text-white">${book.evaluationQuantity}人已评</h5></div>
</div>
</div>
<div class="row p-2 description">
${book.description}
</div>
<div class="alert alert-primary w-100 mt-2" role="alert">短评
<button type="button" id="btnEvaluation" class="btn btn-success btn-sm text-white float-right"
style="margin-top: -3px;">
写短评
</button>
</div>
<div class="reply pl-2 pr-2">
<#list evaluationList as evaluation>
<div>
<div>
<span class="pt-1 small text-black-50 mr-2">${evaluation.createTime?string('MM-dd')}</span>
<span class="mr-2 small pt-1">${evaluation.member.nickname}</span>
<span class="stars mr-2" data-score="${evaluation.score}"></span>
<button type="button" data-evaluation-id="${evaluation.evaluationId}"
class="btn btn-success btn-sm text-white float-right" style="margin-top: -3px;">
<img style="width: 24px;margin-top: -5px;" class="mr-1"
src="https://img3.doubanio.com/f/talion/7a0756b3b6e67b59ea88653bc0cfa14f61ff219d/pics/card/ic_like_gray.svg"/>
<span>${evaluation.enjoy}</span>
</button>
</div>
<div class="row mt-2 small mb-3">
${evaluation.content}
</div>
<hr/>
</div>
</#list>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body">
您需要登录才可以操作哦~
</div>
<div class="modal-footer">
<a href="/login.html" type="button" class="btn btn-primary">去登录</a>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="dlgEvaluation" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body">
<h6>为"从 0 开始学爬虫"写短评</h6>
<form id="frmEvaluation">
<div class="input-group mt-2 ">
<span id="score"></span>
</div>
<div class="input-group mt-2 ">
<input type="text" id="content" name="content" class="form-control p-4" placeholder="这里输入短评">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnSubmit" class="btn btn-primary">提交</button>
</div>
</div>
</div>
</div>
</body>
</html>
相关代码:
package com.imooc.reader.service;
import com.imooc.reader.entity.Member;
import com.imooc.reader.entity.MemberReadState;
public interface MemberService {
/**
* 会员注册
* @param username 用户名
* @param password 密码
* @param nickname 昵称
* @return 新会员对象
*/
public Member createMember(String username,String password,String nickname);
/**
* 登录检查
* @param username 用户名
* @param password 密码
* @return 登录对象
*/
public Member checkLogin(String username,String password);
/**
* 获取阅读状态
* @param memberId 会员编号
* @param bookId 图书编号
* @return 阅读状态对象
*/
public MemberReadState selectMemberReadState(Long memberId,Long bookId);
/**
* 更新阅读状态
* @param memberId 会员编号
* @param bookId 图书编号
* @param readState 阅读状态
* @return 阅读状态对象
*/
public MemberReadState updateMemberReadState(Long memberId,Long bookId,Integer readState);
}
相关代码:
package com.imooc.reader.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imooc.reader.entity.Member;
import com.imooc.reader.entity.MemberReadState;
import com.imooc.reader.mapper.MemberMapper;
import com.imooc.reader.mapper.MemberReadStateMapper;
import com.imooc.reader.service.MemberService;
import com.imooc.reader.service.exception.BussinessException;
import com.imooc.reader.utils.MD5Utils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
@Service("memberService")
@Transactional
public class MemberServiceImpl implements MemberService {
@Resource
private MemberMapper memberMapper;
@Resource
private MemberReadStateMapper memberReadStateMapper;
/**
* 会员注册
*
* @param username 用户名
* @param password 密码
* @param nickname 昵称
* @return 新会员对象
*/
@Override
public Member createMember(String username, String password, String nickname) {
QueryWrapper<Member> queryWrapper=new QueryWrapper<Member>();
queryWrapper.eq("username",username);
List<Member> memberList = memberMapper.selectList(queryWrapper);
//判断用户是否已存在
if (memberList.size()>0){
throw new BussinessException("M01","用户名已存在");
}
Member member=new Member();
member.setUsername(username);
member.setNickname(nickname);
int salt=new Random().nextInt(1000)+1000;//盐值
String md5=MD5Utils.md5Digest(password,salt);
member.setPassword(md5);
member.setSalt(salt);
member.setCreateTime(new Date());
memberMapper.insert(member);
return member;
}
/**
* 登录检查
*
* @param username 用户名
* @param password 密码
* @return 登录对象
*/
@Override
public Member checkLogin(String username, String password) {
QueryWrapper<Member> queryWrapper=new QueryWrapper<Member>();
queryWrapper.eq("username",username);
Member member=memberMapper.selectOne(queryWrapper);
if (member==null){
throw new BussinessException("M02","用户不存在");
}
String md5=MD5Utils.md5Digest(password,member.getSalt());
if (!md5.equals(member.getPassword())){
throw new BussinessException("M03","输入密码有误");
}
return member;
}
/**
* 获取阅读状态
*
* @param memberId 会员编号
* @param bookId 图书编号
* @return 阅读状态对象
*/
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true)//不需要事务,只读状态
public MemberReadState selectMemberReadState(Long memberId, Long bookId) {
QueryWrapper<MemberReadState> queryWrapper=new QueryWrapper<MemberReadState>();
queryWrapper.eq("member_id",memberId);
queryWrapper.eq("book_id",bookId);
MemberReadState memberReadState = memberReadStateMapper.selectOne(queryWrapper);
return memberReadState;
}
/**
* 更新阅读状态
*
* @param memberId 会员编号
* @param bookId 图书编号
* @param readState 阅读状态
* @return 阅读状态对象
*/
@Override
public MemberReadState updateMemberReadState(Long memberId, Long bookId, Integer readState) {
QueryWrapper<MemberReadState> queryWrapper=new QueryWrapper<MemberReadState>();
queryWrapper.eq("book_id",bookId);
queryWrapper.eq("member_id",memberId);
MemberReadState memberReadState=memberReadStateMapper.selectOne(queryWrapper);
//无则新增,有则更新
if (memberReadState==null){
memberReadState=new MemberReadState();
memberReadState.setMemberId(memberId);
memberReadState.setBookId(bookId);
memberReadState.setCreateTime(new Date());
memberReadState.setReadState(readState);
memberReadStateMapper.insert(memberReadState);
}else {
memberReadState.setReadState(readState);
memberReadStateMapper.updateById(memberReadState);
}
return memberReadState;
}
}
相关代码:
package com.imooc.reader.controller;
import com.imooc.reader.entity.Member;
import com.imooc.reader.entity.MemberReadState;
import com.imooc.reader.service.MemberService;
import com.imooc.reader.service.exception.BussinessException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
@Controller
public class MemberController {
@Resource
private MemberService memberService;
@GetMapping("/register.html")
public ModelAndView showRegister(){
return new ModelAndView("/register");
}
@GetMapping("/login.html")
public ModelAndView showLogin(){
return new ModelAndView("/login");
}
@PostMapping("/registe")
@ResponseBody
public Map registe(String vc, String username, String password, String nickname, HttpServletRequest request){
//获取当前会话中的验证码
String verifyCode=(String)request.getSession().getAttribute("kaptchaVerifyCode");
//验证码对比
Map result=new HashMap();
if (vc==null||verifyCode==null||!vc.equalsIgnoreCase(verifyCode)){
result.put("code","VC01");
result.put("msg","验证码错误");
}else{
try {
memberService.createMember(username, password, nickname);
result.put("code","0");
result.put("msg","success");
}catch (BussinessException e){
e.printStackTrace();
result.put("code",e.getCode());
result.put("msg",e.getMsg());
}
}
return result;
}
@PostMapping("/check_login")
@ResponseBody
public Map checkLogin(String username, String password, String vc, HttpSession session){
//获取当前会话中的验证码
String verifyCode=(String)session.getAttribute("kaptchaVerifyCode");
//验证码对比
Map result=new HashMap();
if (vc==null||verifyCode==null||!vc.equalsIgnoreCase(verifyCode)){
result.put("code","VC01");
result.put("msg","验证码错误");
}else {
try {
Member member = memberService.checkLogin(username, password);
session.setAttribute("loginMember",member);
result.put("code","0");
result.put("msg","success");
}catch (BussinessException e){
e.printStackTrace();
result.put("code",e.getCode());
result.put("msg",e.getMsg());
}
}
return result;
}
/**
* 更新想看/看过阅读状态
* @param memberId 会员Id
* @param bookId 图书ID
* @param readState 阅读状态
* @return 护理结果
*/
@PostMapping("/update_read_state")
@ResponseBody
public Map updateReadState(Long memberId,Long bookId,Integer readState){
Map result=new HashMap();
try {
memberService.updateMemberReadState(memberId,bookId,readState);
result.put("code","0");
result.put("msg","success");
}catch (BussinessException e){
e.printStackTrace();
result.put("code",e.getCode());
result.put("msg",e.getMsg());
}
return result;
}
}
问题描述:
老师好,这里单击后一直取不到值,找了半天不知道错在哪里,麻烦帮忙看下
1回答
____xyz
提问者
2021-08-12
老师好,我已经找出问题了,暂时不用麻烦你们哈
相似问题