老师,我的页面为什么会出现这个错误,怎么解决呢?
来源:5-1 图书详情页-读取图书信息
慕仰7036876
2020-07-28 21:27:58
package com.imooc.reader.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.imooc.reader.entity.Book; public interface BookService { /** * 分页查询图书 * @param categoryId 分类Id * @param order 排序方式 * @param page 页号 * @param rows 每页记录数 * @return 分页对象 */ public IPage<Book> paging(Long categoryId, String order, Integer page, Integer rows); /** * 根据图书编号查询图书对象 * @param bookId 图书编号 * @return 图书对象 */ public Book selectById(Long bookId); }
package com.imooc.reader.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.imooc.reader.entity.Book; import com.imooc.reader.mapper.BookMapper; import com.imooc.reader.service.BookService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; @Service("bookService") @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true) public class BookServiceImpl implements BookService { @Resource private BookMapper bookMapper; @Resource private BookService bookService; //此为接口实现类 public IPage<Book> paging(Long categoryId, String order, Integer page, Integer rows) { Page<Book> p = new Page<Book>(page, rows); QueryWrapper<Book> queryWrapper = new QueryWrapper<Book>(); if(categoryId != null && categoryId != -1){ queryWrapper.eq("category_id", categoryId); } if(order != null){ if(order.equals("quantity")){ queryWrapper.orderByDesc("evaluation_quantity"); }else if(order.equals("score")){ queryWrapper.orderByDesc("evaluation_score"); } } IPage<Book> pageObject = bookMapper.selectPage(p, queryWrapper); return pageObject; } /** * 根据图书编号查询图书对象 * @param bookId 图书编号 * @return 图书对象 */ public Book selectById(Long bookId){ Book book = bookMapper.selectById(bookId); return book; } }
package com.imooc.reader.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @TableName("book") public class Book { @TableId(type = IdType.AUTO) private Long bookId; private String bookName; private String subTitle; private String author; private String cover; private String description; private Long categoryId; private Float evaluationScore; private Integer evaluationQuantity; public Book(){ } public Book(Long bookId, String bookName, String subTitle, String author, String cover, String description, Long categoryId, Float evaluationScore, Integer evaluationQuantity) { this.bookId = bookId; this.bookName = bookName; this.subTitle = subTitle; this.author = author; this.cover = cover; this.description = description; this.categoryId = categoryId; this.evaluationScore = evaluationScore; this.evaluationQuantity = evaluationQuantity; } public Long getBookId() { return bookId; } public void setBookId(Long bookId) { this.bookId = bookId; } public String getSubTitle() { return subTitle; } public void setSubTitle(String subTitle) { this.subTitle = subTitle; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getCover() { return cover; } public void setCover(String cover) { this.cover = cover; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Long getCategoryId() { return categoryId; } public void setCategoryId(Long categoryId) { this.categoryId = categoryId; } public Float getEvaluationScore() { return evaluationScore; } public void setEvaluationScore(Float evaluationScore) { this.evaluationScore = evaluationScore; } public Integer getEvaluationQuantity() { return evaluationQuantity; } public void setEvaluationQuantity(Integer evaluationQuantity) { this.evaluationQuantity = evaluationQuantity; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } @Override public String toString() { return "Book{" + "bookId=" + bookId + ", bookName='" + bookName + '\'' + ", subTitle='" + subTitle + '\'' + ", author='" + author + '\'' + ", cover='" + cover + '\'' + ", description='" + description + '\'' + ", categoryId=" + categoryId + ", evaluationScore=" + evaluationScore + ", evaluationQuantity=" + evaluationQuantity + '}'; } }
package com.imooc.reader.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.imooc.reader.entity.Book; public interface BookMapper extends BaseMapper<Book> { }
package com.imooc.reader.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.imooc.reader.entity.Book; import com.imooc.reader.entity.Category; import com.imooc.reader.service.BookService; import com.imooc.reader.service.CategoryService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import java.util.List; @Controller public class BookController { @Resource private CategoryService categoryService; @Resource private BookService bookService; /** * 显示首页 * @return */ @GetMapping("/") public ModelAndView showIndex(){ ModelAndView mav = new ModelAndView("/index"); List<Category> categoryList = categoryService.selectAll(); mav.addObject("categoryList", categoryList); return mav; } /** * 分页查询图书列表 * @param p 页号 * @return 分页对象 */ @GetMapping("/books") @ResponseBody public IPage<Book> selectBook(Long categoryId, String order, Integer p){ if(p == null){ p = 1; } IPage<Book> pageObject = bookService.paging(categoryId, order, p, 10); return pageObject; } @GetMapping("/book/{id}") public ModelAndView showDetail(@PathVariable("id") Long id){ Book book = bookService.selectById(id); ModelAndView mav = new ModelAndView("/detail"); mav.addObject("book", book); return mav; } }
<!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}); }) </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"> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-126</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="41" 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>33</span> </button> </div> <div class="row mt-2 small mb-3"> 很好的教程,内容写的也比较有深度,值得推荐。 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-120</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="42" 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>24</span> </button> </div> <div class="row mt-2 small mb-3"> 感谢慕课网提供这么好的内容 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-28</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="43" 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>47</span> </button> </div> <div class="row mt-2 small mb-3"> 网上大神推荐的内容,有空看下 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-435</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="44" 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>0</span> </button> </div> <div class="row mt-2 small mb-3"> 我很喜欢,内容精典,值得收藏,推荐阅读 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-24</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="45" 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>21</span> </button> </div> <div class="row mt-2 small mb-3"> 活动买的很划算,作为开发的工具书真的是很好 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-476</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="46" 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>12</span> </button> </div> <div class="row mt-2 small mb-3"> 很好的教程,干货很多,对我的帮助非常大。 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-118</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="47" 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>33</span> </button> </div> <div class="row mt-2 small mb-3"> 慕课出品,值得信赖,很喜欢 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-323</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="48" 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>33</span> </button> </div> <div class="row mt-2 small mb-3"> 非常好的教程,对自己的提升很大,面向工资编程,奥力给! </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-184</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="49" 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>48</span> </button> </div> <div class="row mt-2 small mb-3"> 给老公买的说很好用。 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-397</span> <span class="stars mr-2" data-score="4"></span> <button type="button" data-evaluation-id="50" 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>19</span> </button> </div> <div class="row mt-2 small mb-3"> 别人推荐的,希望有所帮助。一直信赖慕课 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-23</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="51" 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>6</span> </button> </div> <div class="row mt-2 small mb-3"> 很不错啊,一直很信赖慕课网的品质,希望慕课网越做越好! </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-334</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="52" 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>22</span> </button> </div> <div class="row mt-2 small mb-3"> 非常棒,之前已经看过,现在是二刷 </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-410</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="53" 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>8</span> </button> </div> <div class="row mt-2 small mb-3"> 正在看,内容很简洁,容易明白! </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-247</span> <span class="stars mr-2" data-score="5"></span> <button type="button" data-evaluation-id="54" 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>37</span> </button> </div> <div class="row mt-2 small mb-3"> 慕课网的售后服务超级给力! </div> <hr/> </div> <div> <div> <span class="pt-1 small text-black-50 mr-2">05-24</span> <span class="mr-2 small pt-1">慕粉-441</span> <span class="stars mr-2" data-score="4"></span> <button type="button" data-evaluation-id="55" 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>21</span> </button> </div> <div class="row mt-2 small mb-3"> 很不错的教程,讲的很详细 </div> <hr/> </div> </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>
1回答
同学你好,1、根据报错信息,Could not resolve view with name '/detail' in servlet with name 'springmvc'-->无法在名为springmvc的servlet中解析名为“/detail”的视图。
同学在自己项目中是否有正确的detail页面呐,比如:
2、检查测试这里的跳转代码并没有问题,所以在Controller中的代码书写没有问题。
继续加油!祝学习愉快!
相似问题