用Rocker制作模板
在本文中,我們將快速介紹Rocker ,這是一個靜態(tài)類型化的快速Java 8模板引擎。
必需的依賴項
要開始使用Rocker,我們需要在項目中添加以下依賴項:
<dependency><groupId>com.fizzed</groupId><artifactId>rocker-runtime</artifactId><version>0.24.0</version> </dependency><!--?for?hot-reloading?support?in?development?--> <dependency><groupId>com.fizzed</groupId><artifactId>rocker-compiler</artifactId><version>0.24.0</version> </dependency>我們還需要Rocker Maven插件,它將Rocker模板轉(zhuǎn)換為Java代碼:
<build><plugins><plugin><groupId>com.fizzed</groupId><artifactId>rocker-maven-plugin</artifactId><version>0.24.0</version><executions><execution><id>generate-rocker-templates</id><phase>generate-sources</phase><goals><goal>generate</goal></goals></execution></executions></plugin></plugins> </build>創(chuàng)建第一個模板
我們將從一個簡單的示例開始,該示例包含兩個Rocker模板和一個Java類。
在第一個模板( main.rocker.html )中,我們定義了基本的頁面結(jié)構(gòu):
@args?(String?title,?RockerBody?content)<html><head><title>@title</title></head><body>@content</body> </html>該模板具有兩個參數(shù):頁面標(biāo)題和名為content的RockerBody元素。 content參數(shù)基本上是添加到<body>標(biāo)簽的子模板。
現(xiàn)在,我們創(chuàng)建另一個模板( basic.rocker.html ),該模板定義傳遞給我們的第一個模板的內(nèi)容:
@args?(String?name)@views.main.template("Basic?example")?->?{<h1>Hello?@name!</h1> }該模板具有寫入到<h1>標(biāo)記的單個名稱參數(shù)。 我們使用@ views.main引用第一個模板( main.rocker.html ),并使用template(..)方法進(jìn)行渲染。 “基本示例”將作為標(biāo)題參數(shù)傳遞。 content參數(shù)在花括號內(nèi)定義。
渲染蹺板模板
將Rocker模板轉(zhuǎn)換為Java代碼。 可以使用以下Maven命令完成此操作:
mvn generate-sources這將為target / generated-sources / rocker目錄中的每個模板生成一個Java類。
現(xiàn)在,我們可以使用Java代碼呈現(xiàn)模板:
public?class?Main?{public?static?void?main(String...?args)?throws?Exception?{//?The?template?"basic.rocker.html"?got?converted?to?the?class?named?"basic"//?which?is?located?in?the?"views"?packageString?result?=?views.basic.template("John").render().toString();System.out.println(result);} }我們得到的輸出如下所示:
<html><head><title>Basic?example</title></head><body><h1>Hello?John!</h1></body> </html>這種方法的一個問題是,每次在模板文件中進(jìn)行更改時,都需要運(yùn)行mvn generate-sources。 另請注意,如果代碼生成失敗,則Java代碼可能無法編譯,因為其中一個模板存在問題。
另一種可能的方法是使用熱重載并通過文件名動態(tài)引用模板。
在這種情況下,Java代碼如下所示:
public?class?Main?{public?static?void?main(String...?args)?throws?Exception?{//?Enable?hot?reloadingRockerRuntime.getInstance().setReloading(true);//?Reference?via?string?instead?of?using?generated?codeString?result?=?Rocker.template("views/basic.rocker.html").bind("name",?"John").render().toString();System.out.println(result)} }我們得到的輸出是完全相同的。
表達(dá)方式
假設(shè)我們有一個簡單的User類,其中包含方法getFirstName()和getLastName()。 在以下示例中,我們看到了如何在Rocker模板中使用User對象:
@import?com.mscharhag.rockerexample.*@args?(User?user)@views.main.template("Expressions")?->?{<ul><!--?first?name?--><li>@user.getFirstName()</li><!--?first?three?letters?of?first?name?--><li>@user.getFirstName().substring(0,?3)</li><!--?first?name?and?last?name?--><li>@user.getFirstName()?@user.getLastName()</li><!--?using?a?variable-->@name?=>?{@user.getFirstName()?@user.getLastName()}<li>@name</li></ul> }條件
Rocker支持標(biāo)準(zhǔn)的Java if-else流結(jié)構(gòu),如以下示例所示:
@import?com.mscharhag.rockerexample.*@args?(User?user)@views.main.template("Conditions")?->?{@if?(user.getFirstName().length()?>?10)?{<p>Long?first?name</p>}?else?{<p>short?first?name</p>} }循環(huán)
蹺板模板支持不同形式的循環(huán):
@import?com.mscharhag.rockerexample.* @import?java.util.*@args?(List<User>?users)@views.main.template("Loops")?->?{<ul><!--?standard?for?loop?-->@for?(int?i?=?0;?i?<?users.size();?i++)?{<li>@users.get(i).getFirstName()</li>}<!--?standard?'for?each'?loop?-->@for?(User?user?:?users)?{<li>@user.getFirstName()</li>}<!--?for?each?loop?with?additional?loop?information<li>0:?John,?first:?true,?last:?false</li><li>1:?Martin,?first:?false,?last:?false</li><li>2:?Anna,?first:?false,?last:?true</li>-->@for?((i,?user)?:?users)?{<li>@i.index():?@user.getFirstName(),?first:?@i.first(),?last:?@i.last()</li>}</ul> }最后一個循環(huán)是Java for-each循環(huán)的特殊變體。 第二個索引參數(shù)(在示例中為i)可用于訪問當(dāng)前迭代信息。
結(jié)論
如果您正在尋找Java模板引擎,那么Rocker無疑是一個選擇。 根據(jù)Rocker GitHub存儲庫上的基準(zhǔn), Rocker比其他Java模板引擎(如Freemarker或Velocity)快得多。 全面的文檔是另一個值得一提的地方。
Rocker可以編譯為Java,并允許您以類型安全的方式將數(shù)據(jù)傳遞到視圖這一事實非常有趣。 一方面,這很有用,因為它有助于減少錯誤。 另一方面,在我編寫示例時,相同的功能使我有些惱火。 每當(dāng)我更改影響Rocker模板的代碼時(例如,通過更改Rocker模板中調(diào)用的方法的名稱),模板就會停止編譯。 在某些情況下,這再次使我的Java代碼無法編譯(因為它使用的是Rocker生成的類)。 這是預(yù)料之中的,但這可能會破壞我首選的工作流程,即先編寫Java代碼然后再修復(fù)模板。 通過文件名而不是使用生成的類來引用模板可以解決此問題(但也可以避免在編譯時進(jìn)行類型檢查)。
翻譯自: https://www.javacodegeeks.com/2018/05/templating-with-rocker.html
總結(jié)
以上是生活随笔為你收集整理的用Rocker制作模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aimp安卓版设置(aimp app)
- 下一篇: 优学派安装电脑系统(电脑优学派官方平台)