2015-04-19 50 views
0

我正在使用Play 2.3(Java)框架,我想設置404頁面。 我知道GlobalSettings的onHandlerNotFound方法。Play Framework - 爲資產定義404頁面

但資產似乎有自己的處理 - 資產類不會調用我的onHandlerNotFound方法,只發送空404狀態。

我可以以某種方式攔截資產中的錯誤並設置我自己的處理?

在我看來,相當有限的是任何不存在的資產都會返回空404頁面。

感謝您的任何建議。

編輯:一些代碼 從路線:

GET  /assets/*file    controllers.Assets.at(path="/public", file) 

從GlobalSettings:

@Override 
public Promise<Result> onHandlerNotFound(RequestHeader arg0) { 
    return Promise.<Result>pure(Results.notFound(
     errPage("notfound"))); 
} 

回答

0

我認爲這是一個在不同的線程問了一個非常類似的問題。

如果您正在使用資產,我認爲它們是一些對象,如文件?如果是這樣,你需要從這裏看一看解決方案的第二部分:

How to create a custom 404 page handler with Play 2.0?

的一個地方安德魯é寫了關於「真正的處理程序無法找到對象」的情況。這部分是關於一個用戶請求一個根本不存在的對象。

+0

感謝您的回覆,但關於鏈接會談定製控制器。 我需要攔截內置Assets類的錯誤處理。 我查看了它的源代碼,它使用了一些類型爲HttpErrorHandler的errorHandler,但由於我只理解Java而不是Scala,所以我不明白它是如何初始化的,以及它是否可能以某種方式更改。 有人能在哪裏配置? – Juraj

+0

你可以發佈一些代碼來更好地理解你正在努力完成的任務嗎? – hamena314

+0

我在初始文章中添加了一些代碼片段。 但要指定我想要的: 如果有人前往/ sandkja,則不會選擇路由並調用GlobalSettings.onHandlerNotFound,並顯示一些錯誤頁面。 但是,如果有人去/ assets/njdfhew,資產控制器將處理該操作,並且它有自己的錯誤處理 - 以防未發現狀態爲404的空白頁面。 我想以某種方式將errorHandler插入到資產類,以便我可以自定義錯誤消息,找不到資產目錄中的URL。 – Juraj

1

覆蓋onHandlerNotFound由於找到了處理函數,因此在Global中將不起作用。

對於內置assets控制器,當它找不到文件時,它使用項目的HttpErrorHandler的onClientError來獲取顯示的結果。

你可以看一下這裏定製它:

的Java:https://www.playframework.com/documentation/2.5.x/JavaErrorHandling

斯卡拉:https://www.playframework.com/documentation/2.5.x/ScalaErrorHandling

這裏是Scala的例子:

import play.api.http.HttpErrorHandler 
import play.api.mvc._ 
import play.api.mvc.Results._ 
import scala.concurrent._ 
import javax.inject.Singleton; 

@Singleton 
class ErrorHandler extends HttpErrorHandler { 

    def onClientError(request: RequestHeader, statusCode: Int, message: String) = { 
    Future.successful(
     // Your custom error page can go here. 
     Status(statusCode)("A client error occurred: " + message) 
    ) 
    } 
}