velocity的foreach遍历数据

1、什么是Velocity

  Velocity 是一个简单而强大的基于 Java 的模板引擎,可将数据从纯 Java 对象呈现为文本、xml、电子邮件、SQL、Post Script、HTML 等。模板语法和呈现引擎既易于理解,又易于学习和实施.

功能远远超出了 Web 领域(例如 xdoclet、middlegen、Intellij 等),使程序员能够专注于编写功能代码,同时,模板设计人员可以直接修改模板以创建有吸引力的输出

在 webapps 中,模型-视图-控制 (MVC) 分离可以被严格执行,因为模板不包含“代码”。或者,由程序员决定,可以在模板中提供“工具”,以便更直接地访问数据。

2、学习Velocity的参考网站

公司的项目使用的是velocity模板引擎,所以在日常的编码中做个记录,方便下次查找使用:

附上我学习velocity这个技术的参考网站:

Java Velocity模板引擎详解

3、需求以及实现

  遍历数据库中的用户数据,并在前台页面进行一个展示:

DAO:

velocity的foreach遍历数据
 1 /**
 2  * 对于用户的一些查询方法(dao层)
 3  *
 4  * @author zhangzhixi
 5  * @date 2021-6-25 10:43
 6  */
 7 public class InquireMemberDataManager {
 8     /**
 9      * 单例创建对象
10      */
11     private static InquireMemberDataManager singleton;
12     private static final Logger LOG = LoggerFactory.getLogger(InquireMemberDataManager.class);
13 
14     public static InquireMemberDataManager instance() {
15         if (singleton == null) {
16             singleton = new InquireMemberDataManager();
17         }
18         return singleton;
19     }
20 
21     private static CommonDatabaseAccess db() {
22         return CommonDatabaseAccess.instance();
23     }
24 
25     /**
26      * 通过name获取这个用户
27      * <p>
28      * //     * @param loginname 用户名称
29      *
30      * @return 用户实体
31      * @throws DbAccessException
32      */
33     public List<Member> getMember(String name) throws DbAccessException {
34 
35         String sql = "SELECT * FROM T_MEM_MEMBER WHERE F_LOGINNAME= ?";
36 
37         List<Member> member = new ArrayList<>();
38         // 
39         IDbacTransaction tx = db().beginTransaction();
40         try {
41             member = db().listObjects(sql, new Object[]{name}, Member.class, 0, 0);
42             System.out.println("=======================>>" + member);
43         } catch (DbAccessException e) {
44             tx.rollback();
45             throw e;
46         } finally {
47             db().endTransaction();
48         }
49         return member;
50     }
51 }
View Code

Service:

velocity的foreach遍历数据
 1 /**
 2  * service层
 3  *
 4  * @author zhangzhixi
 5  * @date 2021-6-25 10:57
 6  */
 7 public class InquireMemberDataService {
 8     private static InquireMemberDataService singleton;
 9     private static final Logger LOG = LoggerFactory.getLogger(InquireMemberDataService.class);
10 
11     public static InquireMemberDataService instance() {
12         if (singleton == null) {
13             singleton = new InquireMemberDataService();
14         }
15         return singleton;
16     }
17 
18 
19     public List<Member> getMember(String name) throws DbAccessException {
20         // 调用dao层,执行sql
21         InquireMemberDataManager instance = InquireMemberDataManager.instance();
22         List<Member> member = instance.getMember(name);
23 
24         // 一些不重要的数据输出
25         for (Member member1 : member) {
26             System.out.println("Service===》" + member);
27         }
28         return member;
29     }
30 }
View Code

Controller:

velocity的foreach遍历数据
 1 /**
 2      * 个人中心-张志喜测试
 3      *
 4      * @param name     用户名
 5      * @param model    视图层处理数据以及视图页面的跳转
 6      * @param request  请求
 7      * @param response 响应
 8      * @return 用户数据到前台页面进行一个展示
 9      */
10     @RequestMapping(value = "/myTest.htm", method = RequestMethod.POST)
11     public ModelAndView weeklyRecordByDate(String name, Model model, HttpServletRequest request, HttpServletResponse response) throws CmsException, JsonProcessingException, DbAccessException {
12         // 调用service层,得到用户数据
13         List<Member> member = InquireMemberDataService.instance().getMember(name);
14 
15         for (Member mem : member) {
16             System.out.println(mem);
17         }
18 
19         // 将查询到的用户数据返回到前端页面
20         if (member.size() > 0) {
21             // 返回视图数据
22             model.addAttribute("msg", member);
23         } else {
24             model.addAttribute("msg", "查询的用户不存在或者数据为空,请重新输入!");
25             return new ModelAndView("pc/cms/article/article/zzxView");
26         }
27         return new ModelAndView("pc/cms/article/article/zzxData");
28     }
29 
30     /**
31      * 用户姓名数据填写查询页面
32      *
33      * @return 跳转到查询用户数据查询表单页面
34      */
35     @RequestMapping(value = "/myView.htm", method = RequestMethod.GET)
36     public ModelAndView getModelAndView() {
37         return new ModelAndView("pc/cms/article/article/zzxView");
38     }
View Code

前端代码:

  用户输入数据:

velocity的foreach遍历数据
 1 ##注册界面内容
 2 
 3 #if($!msg == "查询的用户不存在或者数据为空,请重新输入!")
 4 <script>
 5     alert('$!msg');
 6 </script>
 7 #end
 8 <div class="container main-content2" style="text-align: center">
 9     <div class="row clearfix">
10         ## from表单进行跳转到具体的查询页面
11         <form class="login-form" id="loginForm" method="post" action="#rootPath("myTest.htm")"
12               enctype="multipart/form-data">
13             <div class="form-group">
14                 <label class="form-label" for="name"><span class="star"></span>姓名</label>
15                 <input type="text" class="form-control input" id="name" name="name" placeholder="请输入您的姓名"/>
16             </div>
17 
18             <div class="form-group">
19                 <button type="submit" class="btn btn-login">立即查询</button>
20             </div>
21         </form>
22         <div class="marked-words">
23             <strong id="message-marked-words"></strong>
24         </div>
25     </div>
26 </div>
View Code

  数据展示:

velocity的foreach遍历数据
 1 <div id="myTabContent" class="tab-content" style="text-align: center">
 2         <table border="1" cellpadding="3" cellspacing="0" style="width: 60%;margin:auto">
 3             <thead style="text-align:center">
 4             <tr>
 5                 <th>ID</th>
 6                 <th>登录名</th>
 7                 <th>用户名</th>
 8                 <th>身份证号</th>
 9                 <th>手机号</th>
10                 <th>学历</th>
11                 <th>职业</th>
12                 <th>邮箱</th>
13             </tr>
14             </thead>
15             <tbody style="text-align: center">
16                 #*#if($!msg == "查询的用户不存在或者数据为空")
17                 <script>
18                     alert('$!msg');
19                 </script>
20                 #else*#
21                 ## 能够直接进来的说明用户数据存在
22                 #foreach($!mem in $!msg)
23                 <tr>
24                     <td>$!mem.Id</td>
25                     <td>$!mem.F_loginname</td>
26                     <td>$!mem.f_username</td>
27                     <td>$!mem.f_id_num</td>
28                     <td>$!mem.f_mobile</td>
29                     <td>$!mem.f_education</td>
30                     <td>$!mem.f_major</td>
31                     <td>$!mem.f_email</td>
32                 </tr>
33                 #end
34                 ###end
35             </tbody>
36         </table>
37 </div>
View Code

测试:

velocity的foreach遍历数据

查询到用户(用户展示)

velocity的foreach遍历数据

未查询到用户:

velocity的foreach遍历数据

上一篇:idea toString() 生成 json 模板


下一篇:Redis核心数据结构应用场景与高性能原理刨析