2013-03-18 20 views
1

所有的異常,並顯示自定義錯誤頁,我使用玩!框架1.2.5。我想以自定義的方式處理播放框架中的所有錯誤。例如,如果有路線錯誤,我想顯示一個適當的錯誤信息,而不是顯示整個路線文件。同樣對於其他錯誤,我想顯示我自己的錯誤頁面。這個怎麼做?處理,而不是默認的框架錯誤頁

回答

2

您可以通過創建新的子包上views包名爲errors定義自己的錯誤頁面。

  1. 404.html找不到錯誤
  2. 403.htmlForbidden錯誤頁:在這個子包,您可以使用錯誤代碼名稱,如您的自定義錯誤頁創建模板文件
  3. 500.html內部服務器錯誤
  4. 等...

不要擔心不發現錯誤頁面的默認路由,它只是在開發模式,幫助開發階段中。在生產模式下,此錯誤頁面(默認框架錯誤頁面)將不會顯示。

- UPDATE

@Catch註釋辦理其他類型的異常可能是有用的。它充當控制器中的動作攔截器,並且在執行某個動作時發生異常時處理異常。請注意,此註釋僅適用於控制器類。

請檢查進一步閱讀文檔here

2

我們需要比@iwawiwi提到要弄清楚什麼數據庫約束消息是由數據庫拋出更多的控制。這解決了使用的方法與在Controller@Catch註釋是這樣的:

@Catch(value=PersistenceException.class) 
public static void handleException(PersistenceException exception) { 
    .. 
} 

我沒有聽說註解之前,這已經在我的工作情況相當不錯。

缺失路線,我們已經增加了一點在這個Controller還有:

@Catch(value=ActionNotFoundException.class) 
public static void catchRouteNotFound(ActionNotFoundException exception) { 
    String referer = session.get("referer"); 

    Logger.error("ActionNotFoundException, referer: %s", referer); 
    Logger.error("Exception: %s", exception); 
} 

這樣我們就可以瞭解在應用程序中缺少路由/錯誤的鏈接。

+0

+1哇,太酷了。我只是注意到這個註釋的力量,..;)但是,當我們想要在控制器中的'@ Before'攔截器標記的某個動作中放置'@ Catch'攔截器時可能會遇到問題。因爲他們兩個充當攔截器。但是,這不是問題,只是不用'@ Catch'標記動作,只是在方法內部處理。不是嗎? – 2013-03-18 16:01:51

+0

我認爲說實話不重要。據我所知,Play在你的控制器中尋找異常處理器來處理拋出的異常。如果它被引入'@ Before'註釋方法中,我認爲它不重要。我認爲你可以通過在@Before方法中拋出你自己的CustomException來輕鬆嘗試,並嘗試捕獲它。 – evandongen 2013-03-18 16:04:22

相關問題