2013-01-08 43 views
2

在Play!框架2.0.4,我正在運行404狀態代碼處理的問題。 在Global.java,我重寫onHandlerNotFound返回一個自定義模板:調用Controller.notFound()通過onHandlerNotFound,但沒有考慮到結果

@Override 
public Result onHandlerNotFound(RequestHeader header) { 
    return Controller.notFound(views.html.not_found.render()); 
} 

它非常適合於未知的路線,但如果我叫Controller.notFound()從一個請求時,它不返回任何東西。

我試着深入調試一下,它通過控制器方法,然後通過onHandlerNotFound,所以它應該返回正確的Result

所以我的問題是,這是正確的行爲?如果是這樣,除了重複前面的代碼外,如何將每個notFound()語句乾淨地重定向到正確的模板?

回答

0

Controller.notFound()基本上返回一個HTML 404響應對象(如new Object())。它爲你設置標題,可能還有其他一些東西。 (這是javadoc說:「生成404 NOT_FOUND簡單結果」)

Global.onHandlerNotFound()更像是try {} catch(HandlerNotFoundException() {}

如果你打電話Controller.notFound(),你應該知道你在做什麼。你甚至可以傳遞一些內容在頁面上再次顯示。 (你在做什麼onHandlerNotFound)。

如果你真的想執行Global.onHandlerNotFound,爲什麼不直接打電話呢?否則,如果您通常不撥打Controller.notFound(),但只需撥打notFound()YourController,您也可以覆蓋此方法並致電Global.onHandlerNotFound()

要明確回答你的問題,是的,這是正確的行爲。這是兩件不同的事情。

+0

當然,我只是想知道是否有一個我不知道的選擇 –