ModelAndView绑定数据模型配合Thymeleaf渲染数据用法学习

分开介绍,大致说一下ModelAndView
ModelAndView是Spring MVC里面重要的组成部分。分为两部分Model和View,Model是后端的返回值,View指的视图。先回忆一下当用户向服务器发送请求时,Spring MVC处理请求的过程
1. DispatcherServlet捕获前端请求;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler是配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回
3. 由HandleMapping定位到具体的(Handler)controller,controller将处理用户请求。
4.一旦controller处理完用户请求,则返回ModelAndView对象给DispatcherSevlet前端控制
4. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet 。
5. ViewResolver 结合Model和View,来渲染视图
6. 将渲染结果返回给客户端。

回忆完mvc的过程,应该大致可以明白ModelAndView负责哪一部分了,简单来说就是负责绑定模型数据转发到相应页面

ModelAndView共有三个作用

其一:ModelAndView 实现后台与前端页面数据交互;

其二:可以用于重定向与转发到指定页面,

其三:可以保存数据继而渲染到页面

接下来就用一段代码看一下ModelAndView的几个常用的用法。

@RequestMapping(value="/games",method =RequestMethod.GET )
   //返回类型设为ModelAndView,这里是无参构造举例说明。
    public ModelAndView GamesPage(){
        ModelAndView modelAndView = new ModelAndView();//实例化一个View的ModelAndView对象
        modelAndView.setViewName("games");//转发到games.html
        modelAndView.addObject("games",gamesMapper.getAllGames());//封装数据,用于前端页面渲染,这里我返回的是一个List。当然Map,Set等数据结构也是可以的。
        return modelAndView;//返回ModelAndView对象
    }

说完ModelAndView,我们再看一下thymeleaf,这个东西是完全可以代替JSP的。thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面, 还有就是thymeleaf可以很好的和spring集成。因为Spring boot中配置JSP相当麻烦,并且也没有很好的契合,对于习惯JSP的大佬们来说十分头疼,不过Springboot支持thymeleaf模板引擎,这个习惯了也是相当好用的。
那配置这个模板引擎呢,之前在博客中详细说过了配置依赖,就不再赘述,直接上H5页面。
首先是引用命名空间
<html xmlns:th="http://www.thymeleaf.org">
在html中引入此命名空间,可避免编辑器出现html验证爆红看着不舒服,虽然加不加命名空间对Thymeleaf的功能没有任何影响。
接下来看一下常用标签
最常用输出标签是
th:text 用来将内容输出到所在标签的body中
代码举例<li th:text="${game.id}"></li>
意思是li的内容是game.id这个数据,用${}来选择
另外还可以选择变量输出

<p>Today is: <span th:text="${today}">25 September 2018</span></p>
 <span th:text="${#calendars.format(today,'dd MMMM yyyy')}">25 September 2018</span>

这里的${today} 用来引用 today 变量,第二个是输出不同的日期模式

其次还有输出URL,输出布尔表达式

 <a href="games/list.html" th:href="@{/games/list}">Games List</a>--输出URL

<div th:if="${user.isAdmin()} == false"> --输出布尔表达式
其他语法自行百度
这里再说两个,一个是循环,一个是分支

<ul th:each="game : ${games}">
        <li th:text="${game.id}"></li>
        <li th:text="${game.name}"></li>
        <li th:text="${game.type}"></li>
        <li><img th:src="${game.image}"/></li>
        <li th></li>
    </ul>

结合上面ModelAndView的代码段来看 ,games是我的list数据集合,game相当于是我的一个引用,可以用这种方式遍历输出。

接下来说分支结构
先说明一下th:if和th:unless
只有在th:if中条件成立时才显示:
th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。
第二个是判断用户类型,不同类型不一样的显示

 <a href="comments.html"  th:href="@{/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a>
 <a href="comments.html"  th:href="@{/product/comments(prodId=${prod.id})}"   th:if="${not #lists.isEmpty(prod.comments)}">view</a>

<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
<p th:case="*">User is some other thing</p>    --默认的 case 相当于default
</div>

后期还会学习其他的数据模型绑定的方法,再分享大家学习经验,谢谢阅览。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值