2013-03-18 21 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

相关问题