聊聊Play框架的模板

lcc發表於2021-09-09

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

 

使用模板

我首先建立一個模板,純粹起檢視功能。在app/views資料夾中,新建檔案index.scala.html (如果已有,則刪除並重新建立)。

html>

  
    Play   
       

Hello World! Start using the Template.

  


這個模板是個純粹的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)
html>

  
    @title   
       

@(content) Start using the template.

  


上面的第一行,以@符號開頭,說明了該模板所接收的兩個引數,即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])
html>

  
    @title   
       

@(content) Start using the template.

    
        @for(line @line     }     
  


迴圈是@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 lines = new ArrayList();
        lines.add("a");
        lines.add("b");
        lines.add("c");
        return ok(views.html.index.render("Play", "Hello World!", lines));
    }
}

得到下面的頁面:

圖片描述

 

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

@if(item) {
      

True

  } else {       

False

  }

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

 

其它

在@* *@中加入註釋

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2809044/,如需轉載,請註明出處,否則將追究法律責任。

相關文章