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,需要注意的是不能在后面的括號中

  加上'/'不然就會訪問不到你指定的鏈接、


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM