來玩Play框架03 模板


作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

在上一章節中,我把字符串通過ok()返回給客戶。我可以把一個完整的html頁面放入字符串中返回。然而,現代的框架都提供了更好的方法——模板。模板將視圖和數據分開。服務器可以把不同的數據傳遞給同一個模板,從而產生不同的頁面。 Play同樣也有一套模板系統。模板的大部分內容都可以用html寫,作為視圖,而在一些特別的地方,預留給數據參數。在模板中,用Scala語言來調用參數。

 

使用模板

我首先創建一個模板,純粹起視圖功能。在app/views文件夾中,新建文件index.scala.html (如果已有,則刪除並重新創建)。

<!DOCTYPE html>
<html>
  <header>
    <title>Play</title>
  </header>

  <body>
    <p>Hello World! Start using the Template.</p>
  </body>
</html>

這個模板是個純粹的html文件,是最簡單的模板形式。

 

修改app/controllers/Application.java:

package controllers; import play.*; import play.mvc.*; public class Application extends Controller { public static Result index() { return ok(views.html.index.render()); } }

ok()中接收的是views.html.index.render(),實際上就是app/views/index.scala.html這一模板的render()方法。Play會根據模板,自動生成相應的類。

*** 也可以用import引入views.html.index,而不是使用完整的類路徑。

 

訪問頁面:

模板語言

這一部分,我把對象作為參數傳給模板,然后在模板中顯示對象中包含的數據。修改index.scala.html:

@(title: String, content: String) <!DOCTYPE html>
<html>
  <header>
    <title>@title</title>
  </header>

  <body>
    <p>@(content) Start using the template.</p>
  </body>
</html>

上面的第一行,以@符號開頭,說明了該模板所接收的兩個參數,即String類型的title和content。在模板中,用@符號和參數名,來調用參數。參數名周圍可以用括號"()",以區分正文。

 

修改動作:

public static Result index() { return ok(views.html.index.render("Play", "Hello World! Parameters passed. ")); }

這里傳遞兩個字符串給模板。最終顯示的結果中,兩個字符串將填充在模板中的適當位置。

 

 

上面把一個對象傳遞給模板。我們還可以在模板中調用對象的屬性或方法:

@object.method()

@object.field

 

模板控制

我還可以用Scala的語法,在模板中實現更復雜的邏輯。比如下面的模板中使用循環

@(title: String, content: String, lines: List[String]) <!DOCTYPE html>
<html>
  <header>
    <title>@title</title>
  </header>

  <body>
    <p>@(content) Start using the template.</p>
    <ul> @for(line <- lines) { <li>@line</li> } </ul>
  </body>
</html>

循環是@for實現的。@后面不僅可以是一個對象,還可以是一個完整的Scala語法。

 

修改動作,把一個字符串類型的表作為參數傳遞給模板:

package controllers; import play.*; import play.mvc.*; import java.util.List; import java.util.ArrayList; public class Application extends Controller { public static Result index() { List<String> lines = new ArrayList<String>(); lines.add("a"); lines.add("b"); lines.add("c"); return ok(views.html.index.render("Play", "Hello World!", lines)); } }

得到下面的頁面:

 

模板中還可以有if選擇結構,比如

@if(item) { <p>True</p> } else { <p>False</p> }

根據參數item的真假,if結構顯示不同的內容。

 

其它

@* *@中加入注釋

由於@的特殊功能,為了在模板中顯示"@"字符,需要使用@@

 

總結

模板

render()

@

 

歡迎繼續閱讀“Java快速教程”系列文章


免責聲明!

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



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