You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 4.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. # spring-boot-demo-template-enjoy
  2. > 本 demo 主要演示了 Spring Boot 项目如何集成 enjoy 模板引擎。
  3. ## pom.xml
  4. ```xml
  5. <?xml version="1.0" encoding="UTF-8"?>
  6. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>spring-boot-demo-template-enjoy</artifactId>
  10. <version>1.0.0-SNAPSHOT</version>
  11. <packaging>jar</packaging>
  12. <name>spring-boot-demo-template-enjoy</name>
  13. <description>Demo project for Spring Boot</description>
  14. <parent>
  15. <groupId>com.xkcoding</groupId>
  16. <artifactId>spring-boot-demo</artifactId>
  17. <version>1.0.0-SNAPSHOT</version>
  18. </parent>
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  22. <java.version>1.8</java.version>
  23. <enjoy.version>3.5</enjoy.version>
  24. </properties>
  25. <dependencies>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. <dependency>
  36. <groupId>com.jfinal</groupId>
  37. <artifactId>enjoy</artifactId>
  38. <version>${enjoy.version}</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.projectlombok</groupId>
  42. <artifactId>lombok</artifactId>
  43. <optional>true</optional>
  44. </dependency>
  45. <dependency>
  46. <groupId>cn.hutool</groupId>
  47. <artifactId>hutool-all</artifactId>
  48. </dependency>
  49. </dependencies>
  50. <build>
  51. <finalName>spring-boot-demo-template-enjoy</finalName>
  52. <plugins>
  53. <plugin>
  54. <groupId>org.springframework.boot</groupId>
  55. <artifactId>spring-boot-maven-plugin</artifactId>
  56. </plugin>
  57. </plugins>
  58. </build>
  59. </project>
  60. ```
  61. ## EnjoyConfig.java
  62. ```java
  63. /**
  64. * <p>
  65. * Enjoy 模板配置类
  66. * </p>
  67. *
  68. * @author yangkai.shen
  69. * @date Created in 2018-10-11 14:06
  70. */
  71. @Configuration
  72. public class EnjoyConfig {
  73. @Bean(name = "jfinalViewResolver")
  74. public JFinalViewResolver getJFinalViewResolver() {
  75. JFinalViewResolver jfr = new JFinalViewResolver();
  76. // setDevMode 配置放在最前面
  77. jfr.setDevMode(true);
  78. // 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件
  79. jfr.setSourceFactory(new ClassPathSourceFactory());
  80. // 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath
  81. // 代替 jfr.setPrefix("/view/")
  82. JFinalViewResolver.engine.setBaseTemplatePath("/templates/");
  83. jfr.setSessionInView(true);
  84. jfr.setSuffix(".html");
  85. jfr.setContentType("text/html;charset=UTF-8");
  86. jfr.setOrder(0);
  87. return jfr;
  88. }
  89. }
  90. ```
  91. ## IndexController.java
  92. ```java
  93. /**
  94. * <p>
  95. * 主页
  96. * </p>
  97. *
  98. * @author yangkai.shen
  99. * @date Created in 2018-10-11 14:22
  100. */
  101. @Controller
  102. @Slf4j
  103. public class IndexController {
  104. @GetMapping(value = {"", "/"})
  105. public ModelAndView index(HttpServletRequest request) {
  106. ModelAndView mv = new ModelAndView();
  107. User user = (User) request.getSession().getAttribute("user");
  108. if (ObjectUtil.isNull(user)) {
  109. mv.setViewName("redirect:/user/login");
  110. } else {
  111. mv.setViewName("page/index");
  112. mv.addObject(user);
  113. }
  114. return mv;
  115. }
  116. }
  117. ```
  118. ## UserController.java
  119. ```java
  120. /**
  121. * <p>
  122. * 用户页面
  123. * </p>
  124. *
  125. * @author yangkai.shen
  126. * @date Created in 2018-10-11 14:24
  127. */
  128. @Controller
  129. @RequestMapping("/user")
  130. @Slf4j
  131. public class UserController {
  132. @PostMapping("/login")
  133. public ModelAndView login(User user, HttpServletRequest request) {
  134. ModelAndView mv = new ModelAndView();
  135. mv.addObject(user);
  136. mv.setViewName("redirect:/");
  137. request.getSession().setAttribute("user", user);
  138. return mv;
  139. }
  140. @GetMapping("/login")
  141. public ModelAndView login() {
  142. return new ModelAndView("page/login");
  143. }
  144. }
  145. ```
  146. ## index.html
  147. ```jsp
  148. <!doctype html>
  149. <html lang="en">
  150. #include("/common/head.html")
  151. <body>
  152. <div id="app" style="margin: 20px 20%">
  153. 欢迎登录,#(user.name)!
  154. </div>
  155. </body>
  156. </html>
  157. ```
  158. ## login.html
  159. ```jsp
  160. <!doctype html>
  161. <html lang="en">
  162. #include("/common/head.html")
  163. <body>
  164. <div id="app" style="margin: 20px 20%">
  165. <form action="/demo/user/login" method="post">
  166. 用户名<input type="text" name="name" placeholder="用户名"/>
  167. 密码<input type="password" name="password" placeholder="密码"/>
  168. <input type="submit" value="登录">
  169. </form>
  170. </div>
  171. </body>
  172. </html>
  173. ```
  174. ## application.yml
  175. ```yaml
  176. server:
  177. port: 8080
  178. servlet:
  179. context-path: /demo
  180. ```
  181. ## Enjoy 语法糖学习文档
  182. http://www.jfinal.com/doc/6-1