第三天(—2022/2/8—)
写用户注册,以及登录和未登录情况下导航栏右侧的状态
编写查询图书
service层
@Service
public class BookService {
@Autowired
BookMapper bookMapper;
public List<Book> queryBooks(){
return bookMapper.selectByExample(new BookExample());
}
}
编写测试
@Test
public void test03(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
BookService mapper = ioc.getBean(BookService.class);
List<Book> books = mapper.queryBooks();
for (Book book : books) {
System.out.println(book.toString());
}
}
向数据库添加数据
controller层
@Controller
@SessionAttributes(value = {"pageInfo"},types = {PageInfo.class})
public class BookController {
@Autowired
BookService bookService;
@RequestMapping("/QueryBook")
public String queryBooks(@RequestParam(value = "pn",defaultValue = "1") Integer pn,
Model model){
PageHelper.startPage(pn,8);
List<Book> books = bookService.queryBooks();
PageInfo page = new PageInfo(books, 8);
model.addAttribute("pageInfo",page);
return "bookList";
}
@RequestMapping("/index")
public String toIndex(){
return "index";
}
}
页面展示
增加分页条
使用pagehelper,引入依赖
出错
Cannot find class: com.github.pagehelper.PageInterceptor
原因:没有将新包加入到lib中
解决:项目结构将包加载到lib
分页条效果
优化分页条
增强分页条显示的一些逻辑
<div class="row text-center">
<div class="col-md-12">
<p class="">当前第<span>${pageInfo.pageNum}</span>页 总共<span>${pageInfo.pages}</span>页</p>
</div>
</div>
<div class="row text-center">
<div >
<nav aria-label="Page navigation">
<ul class="pagination pagination-lg">
<li><a href="${Path}/QueryBook?pn=1">首页</a></li>
<c:if test="${pageInfo.hasPreviousPage}">
<li><a href="${Path}/QueryBook?pn=${pageInfo.pageNum-1}" aria-label="Previous">
<span aria-hidden="true">«</span></a>
</li>
</c:if>
<c:forEach items="${pageInfo.navigatepageNums}" var="pageNum">
<c:if test="${pageNum==pageInfo.pageNum}">
<li class="active"><a href="${Path}/QueryBook?pn=${pageNum}">${pageNum}</a></li>
</c:if>
<c:if test="${pageNum!=pageInfo.pageNum}">
<li ><a href="${Path}/QueryBook?pn=${pageNum}">${pageNum}</a></li>
</c:if>
</c:forEach>
<c:if test="${pageInfo.hasNextPage}">
<li>
<a href="${Path}/QueryBook?pn=${pageInfo.pageNum+1}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<li>
<a href="${Path}/QueryBook?pn=${pageInfo.pages}">末页</a>
</li>
</ul>
</nav>
</div>
阶段测试
问题:发现登录过后跳转页面时导航栏用户显示不登录
问题所在:有关用户登录判断的属性hasUser是null,且发现pageInfo也不能在bookList.jsp页面以外使用
解决:由于controller中写的Model,向Model存入数据是request级别的,故两次请求当然无效。给controller加上
@SessionAttributes(value = {"pageInfo"},types = {PageInfo.class})
使得该属性可以在session中使用
@SessionAttributes和@SessionAttribute 的区别,前者是存,用在类上,后者是取,用在方法参数里