[Lift WebFramework] 在 Lift 中使用 XHTML5

在 Lift 中使用 XHTML5

話說趁這幾天放連假,在做自己需要用的 GTD 網站,用的當然是 Lift Web Framework 這套有趣的 Scala 網頁框架。

Lift 的模板系統,本來就提供了 XHTML 1.0 和 HTML 5 兩種模式。一開始因為想要用一些 placeholder 之類的 HTML5 的新功能,又不想看到 W3C Validator 出現一堆錯誤,所以就選擇用 HTML 5 的 Html5Properties。

但今天愈想愈不對,Lift 的其中一個好處就是模版系統很嚴格,他可以確認你的模版是合法的 XHTML 文件,該關的 <div> 有關之類的,或是開始和結束標籤名稱都正確才會讓你過關。可是如果改採用 HTML 5 的話,因為 Parser 比較寬鬆,會讓明明有問題的 html 檔也過關。

雖然 Lift 也提供了 XHtmlInHtml5OutProperties 這個東西,可以讓你的模版採用 XHTML,然後吐 HTML5 給瀏覽器,但我還是希望最後吐出來的可以是 XHTML5。

於是研究了一下之後,發現要達到這功能還滿簡單的,只要在 class Boot 當的 def boot 中加入下面這一段程式碼就好了:

import net.liftweb.http.Req
import net.liftweb.http.Html5Properties
import net.liftweb.http.OldHtmlProperties
import net.liftweb.http.XHtmlInHtml5OutProperties

class Boot {
    def boot
    {
        // ....

        LiftRules.htmlProperties.default.set { r: Req =>
            val xhtml = new OldHtmlProperties(r.userAgent)
            val html5 = new XHtmlInHtml5OutProperties(r.userAgent)

            html5.setHtmlWriter(xhtml.htmlWriter)
        }
    }
}

回響