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="width: 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,需要注意的是不能在后面的括号中

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

posted @ 2021-07-05 13:52  Java小白的搬砖路  阅读(2351)  评论(0编辑  收藏  举报