1111111111111111111111关于学习crm项目中的问题总结,也是自己遇到的一些错误的记录 2022/7/6

bug

thymeleaf 共享域对象

如果需要将对象的数据显示到前台页面我们可以通过使用thymeleaf实现这一点,Thymeleaf是一个动态渲染页面用的,他简单易懂,不像jsp技术那样需要将html页面改成jsp文件,thymeleaf可以直接在html页面上进行操作。通常我们使用到的是session作用域,说回我的项目crm,在查看市场活动的详情的阶段:

首先说明需求:
点击市场活动的名称时页面跳转到对应市场活动的详情页,在详情页就是该市场活动所对应的各个数据详细展示,如何实现,显然页面跳转到详情页就是同步请求而非异步请求,在请求的地址栏中带上对应市场活动的id,然后在后台控制层接收参数,并通过这个id去到数据库中查询对应的市场活动,得到市场活动的实体,并将该实体类保存在session作用域,然后返回页面的名,通过视图解析器解析到该页面,然后在页面上通过thymeleaf的形式获取会话域中的市场活动实体中的各个数据并显示。

    @RequestMapping("/testSession")
    public String testSessionByServlet(String id,HttpSession session) {
        Activity activity = activityService.selectActivityById(id); //从数据库中查询id对应的市场活动
        session.setAttribute("activity",activity);
        return "detail";//通过试图解析器解析到detail.html页面
    }

熟悉下面的这种thymeleaf的写法,否则每次写的时候多需要查,很费时,这次的crm的第一的开发就遇到的thymeleaf的语法写错而出现报错的情况,th:text="${activity.owner}" 这种写法它

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
  <head>
      <meta charset="UTF-8">
      <title>Title</title>
  </head>
  <body>
      <p th:text="${session.activity.owner}">市场活动的所有者</p>
  </body>
</html>

其他的域对象相关的也需要了解下,下面是各个方式的代码简单熟悉下:


@Controller
public class ScopeController {
    /**
     * 使用servletAPI 向request域对象共享数据
     *
     * @return
     */
    @RequestMapping("/testRequestByServletAPI")
    public String testScope(HttpServletRequest request) {
        request.setAttribute("testRequestScope", "通过servletAPI实现request域对象的数据共享");
        return "nice";
    }

    /**
     * 1,向request域对象共享数据
     * 2,设置视图名称
     *
     * @return ModelAndView
     */
    @RequestMapping("/testModelAndView")//建议使用这种方式
    public ModelAndView testModelAndView() {
        ModelAndView modelAndView = new ModelAndView();
        //首先处理模型数据,即向请求域request共享数据
        modelAndView.addObject("testRequestScope", "ModelAndVeiw的使用");
        //设置试图名称
        modelAndView.setViewName("nice");
        System.out.println(modelAndView.getClass().getName());
        return modelAndView;
    }

    /*
        下面的三种方式利用的都是同一个对象实例化的  --> org.springframework.validation.support.BindingAwareModelMap

     */
    @RequestMapping("/testModel")
    public String testModel(Model model) {
        model.addAttribute("testRequestScope", "使用model共享request域中的数据");
        System.out.println(model.getClass().getName());//
        return "nice";
    }

    @RequestMapping("/testMap")
    public String testMap(Map<String, Object> map) {
        map.put("testRequestScope", "以map集合的方式");
        System.out.println(map.getClass().getName());
        return "nice";
    }

    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap) {
        modelMap.addAttribute("testRequestScope", "使用modelmap共享request请求域中的数据");
        System.out.println(modelMap.getClass().getName());
        return "nice";
    }


    //-----------------------------------------------------------------------------------------------------------------------------
    //向session域共享数据
    @RequestMapping("/testSession")
    public String testSessionByServlet(HttpSession session) {
        User user = new User(12,"king","23");
        session.setAttribute("user",user);
        session.setAttribute("sessionTest","在会话域的使用中建议使用原生的Servlet的方式(简单)");
        return "nice";
    }

    //application 域共享数据
    @RequestMapping("/testApplication")
    public String testApplication(HttpSession session){
        ServletContext application = session.getServletContext();
        application.setAttribute("testApplication","application域");
        return "nice";
    }
}

posted @ 2022-07-06 23:51  kobedu  阅读(96)  评论(0编辑  收藏  举报