您的位置 首页 > 数码极客

freemarker如何获取页面请求的参数?

1. 介绍

1.1 介绍

开发一个网站需要考虑几个问题,首先就是编程语言,其次就是开发框架,最后还需要考虑模板引擎。编程语言这里我们自然是Java语言了;开发框架就是编写网站后端功能模块的基础框架,这里福哥选择的是TFSpring框架;最后的模板引擎,就是在制作用户界面所使用的处理模块,也就是MVC架构里面说的视图,这里福哥就要引出今天的主角FreeMarker了。

FreeMarker是非常有名的基于Java语言的模板引擎,它支持非常丰富的语法,它有非常好的开发团队,所以福哥才会在TFSpring框架里面将FreeMarker作为模板引擎来使用。

2. 安装

2.1 依赖

这是freemarker的依赖,写到里面就可以了。

<dependency>     <groupId>org.freemarker</groupId>     <artifactId>freemarker</artifactId>     <version>2.3.23</version> </dependency>

3. 自动配置

默认情况下springboot会自动配置freemarker,为了演示方便我们先把它关闭了。

@EnableAutoConfiguration(exclude={Da, FreeMarkerAu}) @SpringBootApplication public class TfspringApplication {

4. 示例

下面是一个标准的freemarker的示例。

首先通过Configuration对象的setDirectoryForTemplateLoading方法指定模板根目录。

然后通过Configuration对象的getTemplate方法创建模板对象。

最后通过Template对象的process方法整合模板内容并写入输出对象。

4.1 Java

Configuration configuration = new Configuration()); Template template; Map data = new LinkedHashMap(); StringWriter stringWriter = new StringWriter(); con(new File("u;) + "/src/main/resources/template")); template = con(";); (data, stringWriter); return ();

4.2 模板

模板文件是,这里福哥只写了一句话。

福哥,你好!

4.3 效果

5. 使用

福哥写了一个示例,演示如何将后端程序的变量指定给前端模板来使用的。

5.1 实体User

这是实体User的定义。

@Data public class User {     Integer id;     String name;     String link; }

5.2 Java

下面演示如何向前端模板指定变量。

con(new File("u;) + "/src/main/resources/template")); template = con(";); da("int", 10); da("double", 1.2); da("string", "福哥"); da("html", "<h3>福哥</h3>"); User user = new User(); u(35); u("鬼谷子叔叔"); u(";); da("entity", user); (data, stringWriter);

5.3 模板

下面是前端模板代码的示例。

<table border="1">     <tr>         <td>整型</td><td>${int}</td>     </tr>     <tr>         <td>双精</td><td>${double}</td>     </tr>     <tr>         <td>字符串</td><td>${string}</td>     </tr>     <tr>         <td>HTML</td><td>${html}</td>     </tr>     <tr>         <td>实体</td><td>             <a href="${en}">(${en})${en}</a>         </td>     </tr> </table>

5.4 效果

执行程序可以看到如下的页面效果。

6. 语法

6.1 变量

  • 模板变量使用${...}表示,“...”就是Map对象的键名。
  • 模板变量如果是一个结构可以通过${xxx.yyy}调用结构属性,“xxx”是结构对应的Map对象的键名,“yyy”是结构的属性名称。

6.1.1 实体User

@Data public class User {     Integer id;     String name;     String link; }

6.1.2 Java

da("name", "同福"); User user = new User(); u(35); u("鬼谷子叔叔"); u(";); da("entity", user);

6.1.3 前端模板

<table border="1">     <tr>         <td>普通变量</td><td>${name}</td>     </tr>     <tr>         <td>结构变量</td><td>             <a href="${en}">(${en})${en}</a>         </td>     </tr> </table>

6.1.4 效果

6.2 遍历循环

  • 对集合变量进行遍历,就可以拿到集合的一个一个的元素。
  • 对Map变量进行遍历,就可以拿到Map的键名和键。

6.2.1 Java

Map user = new LinkedHashMap(); u("id", 35); u("name", "鬼谷子叔叔"); u("link", ";); da("user", user);

6.2.2 模板

<table border="1">     <tr>         <td>索引</td><td>Key</td><td>Item</td>     </tr>     <#list user ? keys as key>     <tr>         <td>${key_index}</td><td>${key}</td><td>${user[key]}</td>     </tr>     </#list> </table>

6.2.3 效果

6.3 按次循环

  • 按次循环需要知道起始数值和结束数值,对应数组循环的话需要考虑结束值是数组长度减一。

6.3.1 Java

String[] languages = new String[]{     "PHP",     "Python",     "Java",     "JavaScript",     "C/C++",     "A; }; da("lang", languages);

6.3.2 模板

<table border="1">     <tr>         <td>索引</td><td>语言</td>     </tr>     <#list 0..5 as i>     <tr>         <td>${i}</td><td>${lang[i]}</td>     </tr>     </#list> </table>

6.3.3 效果

6.4 嵌套循环

  • 嵌套遍历循环需要注意子级名称的类型不要弄错了,后端Java要和前端模板严格对应。

6.4.1 Java

List<Map<String, Object>> map = new LinkedList<>(); Map<String, Object> item; item = new HashMap<>(); i("hot", 100); i("lang", "PHP"); map.add(item); item = new HashMap<>(); i("hot", 200); i("lang", "Python"); map.add(item); item = new HashMap<>(); i("hot", 300); i("lang", "Java"); map.add(item); item = new HashMap<>(); i("hot", 60); i("lang", "JavaScript"); map.add(item); item = new HashMap<>(); i("hot", 30); i("lang", "C/C++"); map.add(item); item = new HashMap<>(); i("hot", 80); i("lang", "A;); map.add(item); da("lang", map);

6.4.2 模板

<table border="1">     <tr>         <td>热度</td><td>语言</td>     </tr>     <#list lang as langItem>     <tr>         <#list langItem ? keys as key>         <td>${langItem[key]}</td>         </#list>     </tr>     </#list> </table>

6.4.3 效果

6.5 判断语句

  • 判断语句同样使用“&&”和“||”表示“与”和“或”关系,使用“==”和“!=”表示相等和不相等。
  • 判断语句“else if”需要连着写成“elseif”这样,否则会报错。

6.5.1 比较运算符

  • ==:表示两边相等
  • !=:表示两边不相等
  • gt:表示左边大于右边
  • gte:表示左边大于等于右边
  • lt:表示左边小于右边
  • lte:表示左边小于等于右边

6.5.2 Java

List<Map<String, Object>> map = new LinkedList<>(); Map<String, Object> item; item = new HashMap<>(); i("hot", 100); i("lang", "PHP"); map.add(item); item = new HashMap<>(); i("hot", 200); i("lang", "Python"); map.add(item); item = new HashMap<>(); i("hot", 300); i("lang", "Java"); map.add(item); item = new HashMap<>(); i("hot", 60); i("lang", "JavaScript"); map.add(item); item = new HashMap<>(); i("hot", 30); i("lang", "C/C++"); map.add(item); item = new HashMap<>(); i("hot", 80); i("lang", "A;); map.add(item); da("lang", map);

6.5.3 模板

<table border="1">     <tr>         <td>热度</td><td>语言</td>     </tr>     <#list lang as langItem>     <tr>         <td>             <#if langI gte 200>             <span style="color: red;">${langI}</span>             <#elseif langI gte 100>             <span style="color: blue;">${langI}</span>             <#else>             <span>${langI}</span>             </#if>         </td>         <td>             ${langI}         </td>     </tr>     </#list> </table>

6.5.4 效果

7. 总结

好了,今天福哥给童鞋们讲解了Java的模板引擎FreeMarker的使用技巧,相信大家今后无论是使用TFSpring框架开发项目,还是在自己的项目里面使用FreeMarker模板引擎,都可以制作出非常漂亮的用户界面了。


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“freemarker如何获取页面请求的参数?,freemarker获取页面变量”边界阅读