zoukankan      html  css  js  c++  java
  • Java Velocity模板引擎的使用

    1、什么是Velocity

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

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

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

    2、学习Velocity的参考网站

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

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

    Java Velocity模板引擎详解

    3、基本用法

    3.1:遍历数据

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

    DAO:

    /**
     * 对于用户的一些查询方法(dao层)
     *
     * @author zhangzhixi
     * @date 2021-6-25 10:43
     */
    public class InquireMemberDataManager {
        /**
         * 单例创建对象
         */
        private static InquireMemberDataManager singleton;
        private static final Logger LOG = LoggerFactory.getLogger(InquireMemberDataManager.class);
    
        public static InquireMemberDataManager instance() {
            if (singleton == null) {
                singleton = new InquireMemberDataManager();
            }
            return singleton;
        }
    
        private static CommonDatabaseAccess db() {
            return CommonDatabaseAccess.instance();
        }
    
        /**
         * 通过name获取这个用户
         * <p>
         * //     * @param loginname 用户名称
         *
         * @return 用户实体
         * @throws DbAccessException
         */
        public List<Member> getMember(String name) throws DbAccessException {
    
            String sql = "SELECT * FROM T_MEM_MEMBER WHERE F_LOGINNAME= ?";
    
            List<Member> member = new ArrayList<>();
            //
            IDbacTransaction tx = db().beginTransaction();
            try {
                member = db().listObjects(sql, new Object[]{name}, Member.class, 0, 0);
                System.out.println("=======================>>" + member);
            } catch (DbAccessException e) {
                tx.rollback();
                throw e;
            } finally {
                db().endTransaction();
            }
            return member;
        }
    }

    Service:

    /**
     * service层
     *
     * @author zhangzhixi
     * @date 2021-6-25 10:57
     */
    public class InquireMemberDataService {
        private static InquireMemberDataService singleton;
        private static final Logger LOG = LoggerFactory.getLogger(InquireMemberDataService.class);
    
        public static InquireMemberDataService instance() {
            if (singleton == null) {
                singleton = new InquireMemberDataService();
            }
            return singleton;
        }
    
    
        public List<Member> getMember(String name) throws DbAccessException {
            // 调用dao层,执行sql
            InquireMemberDataManager instance = InquireMemberDataManager.instance();
            List<Member> member = instance.getMember(name);
    
            // 一些不重要的数据输出
            for (Member member1 : member) {
                System.out.println("Service===》" + member);
            }
            return member;
        }
    }

    Controller:

    /**
         * 个人中心-张志喜测试
         *
         * @param name     用户名
         * @param model    视图层处理数据以及视图页面的跳转
         * @param request  请求
         * @param response 响应
         * @return 用户数据到前台页面进行一个展示
         */
        @RequestMapping(value = "/myTest.htm", method = RequestMethod.POST)
        public ModelAndView weeklyRecordByDate(String name, Model model, HttpServletRequest request, HttpServletResponse response) throws CmsException, JsonProcessingException, DbAccessException {
            // 调用service层,得到用户数据
            List<Member> member = InquireMemberDataService.instance().getMember(name);
    
            for (Member mem : member) {
                System.out.println(mem);
            }
    
            // 将查询到的用户数据返回到前端页面
            if (member.size() > 0) {
                // 返回视图数据
                model.addAttribute("msg", member);
            } else {
                model.addAttribute("msg", "查询的用户不存在或者数据为空,请重新输入!");
                return new ModelAndView("pc/cms/article/article/zzxView");
            }
            return new ModelAndView("pc/cms/article/article/zzxData");
        }
    
        /**
         * 用户姓名数据填写查询页面
         *
         * @return 跳转到查询用户数据查询表单页面
         */
        @RequestMapping(value = "/myView.htm", method = RequestMethod.GET)
        public ModelAndView getModelAndView() {
            return new ModelAndView("pc/cms/article/article/zzxView");
        }

    前端代码:

      用户输入数据:

    ##注册界面内容
    
    #if($!msg == "查询的用户不存在或者数据为空,请重新输入!")
    <script>
        alert('$!msg');
    </script>
    #end
    <div class="container main-content2" style="text-align: center">
        <div class="row clearfix">
            ## from表单进行跳转到具体的查询页面
            <form class="login-form" id="loginForm" method="post" action="#rootPath("myTest.htm")"
                  enctype="multipart/form-data">
                <div class="form-group">
                    <label class="form-label" for="name"><span class="star"></span>姓名</label>
                    <input type="text" class="form-control input" id="name" name="name" placeholder="请输入您的姓名"/>
                </div>
    
                <div class="form-group">
                    <button type="submit" class="btn btn-login">立即查询</button>
                </div>
            </form>
            <div class="marked-words">
                <strong id="message-marked-words"></strong>
            </div>
        </div>
    </div>

      数据展示:

    <div id="myTabContent" class="tab-content" style="text-align: center">
            <table border="1" cellpadding="3" cellspacing="0" style=" 60%;margin:auto">
                <thead style="text-align:center">
                <tr>
                    <th>ID</th>
                    <th>登录名</th>
                    <th>用户名</th>
                    <th>身份证号</th>
                    <th>手机号</th>
                    <th>学历</th>
                    <th>职业</th>
                    <th>邮箱</th>
                </tr>
                </thead>
                <tbody style="text-align: center">
                    #*#if($!msg == "查询的用户不存在或者数据为空")
                    <script>
                        alert('$!msg');
                    </script>
                    #else*#
                    ## 能够直接进来的说明用户数据存在
                    #foreach($!mem in $!msg)
                    <tr>
                        <td>$!mem.Id</td>
                        <td>$!mem.F_loginname</td>
                        <td>$!mem.f_username</td>
                        <td>$!mem.f_id_num</td>
                        <td>$!mem.f_mobile</td>
                        <td>$!mem.f_education</td>
                        <td>$!mem.f_major</td>
                        <td>$!mem.f_email</td>
                    </tr>
                    #end
                    ###end
                </tbody>
            </table>
    </div>

    测试:

    查询到用户(用户展示)

    未查询到用户:

    3.2:判断数据是否为null

    <span class="item_speaker">
        #if($!db.f_author != 'null')
       主讲人:$!db.f_author
        #else
            主讲人:
        #end
    </span>

     3.3:判断循环

    在Velocity中,有一个变量$velocityCount用作循环计数,初始值是1。在我们进行foreach循环的时候,可用于做循环次数的判断,而不需要你再重新定义变量

     3.4:取部署项目的地址

      在WEB学习的时候我们学过通过EL表达式:${pageContext.request.contextPath}取出项目的地址

      在JSP中的写法是:<%=request.getContextPath()%>

      它们的意思就是取得当前项目名称(或者是--取出部署的应用程序名)

    在Velocity模板引擎中是这样写的:

      <a href="#rootPath("indexOfPXB.html")">

    举个例子:

      就拿上面的a标签来说,如果你的tomcat是在本机启动,那么#rootPath就会找到你的本机的项目地址:localhost:8080,需要注意的是不能在后面的括号中

      加上'/'不然就会访问不到你指定的链接、

  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14972065.html
Copyright © 2011-2022 走看看