Java 在Play框架中创建自定义的404/500错误页
如何使用Play为其404/505错误页面创建全局自定义外观?在Play Framework 1中,您只需修改2.3.x文档中提供的Java 在Play框架中创建自定义的404/500错误页,java,playframework,Java,Playframework,如何使用Play为其404/505错误页面创建全局自定义外观?在Play Framework 1中,您只需修改2.3.x文档中提供的app/views/errors/404.html和app/views/errors/500.html: 提供应用程序错误页 当应用程序中发生异常时,将调用onError操作。默认情况下,使用内部框架错误页面: import play.api._ import play.api.mvc._ import play.api.mvc.Results._ import s
app/views/errors/404.html
和app/views/errors/500.html:
提供应用程序错误页
当应用程序中发生异常时,将调用onError操作。默认情况下,使用内部框架错误页面:
import play.api._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future
object Global extends GlobalSettings {
override def onError(request: RequestHeader, ex: Throwable) = {
Future.successful(InternalServerError(
views.html.errorPage(ex)
))
}
}
资料来源:
未找到(404)错误页
除了上述onError
处理程序之外,还需要一个onHandlerNotFound
处理程序:
override def onHandlerNotFound(request: RequestHeader) = {
Future.successful(NotFound(views.html.errors.notFoundPage()))
}
来源:这没有文档记录,但请查看GlobalSettings
trait定义
默认错误页模板源
可在此处阅读2.3.x版生产中默认错误模板的来源:
在2.5.x中更改了错误处理。您现在需要一个错误处理程序来处理错误并自己显示自定义错误页面
2.5.x的文档说明:
提供自定义错误处理程序
您可以在Github上找到默认错误页:
有关更多详细信息,请参阅。您可以使用:
import javax.inject.{Inject, Singleton}
import play.api.http.DefaultHttpErrorHandler
import play.api.mvc.Results._
import play.api.mvc.{RequestHeader, Result}
import scala.concurrent.{ExecutionContext, Future}
@Singleton
class ErrorHandler @Inject()(implicit executionContext:ExecutionContext) extends DefaultHttpErrorHandler{
override def onServerError(request: RequestHeader, exception: Throwable): Future[Result] = {
exception match {
case e:scala.MatchError => Future(Ok("Page Not Found"))
case _ => Future(Ok("Internal Server Error :("))
}
}
}
所以-将它们复制到我的项目文件夹并修改它们,对吗?对这些文件的修改应该可以做到这一点!不需要在任何地方复制它们,它们已经在你的项目中。呜呜,不知怎的错过了它们。。。现在我看到了。你在哪里找到这些文件的?当我创建一个新的播放项目时,我在我的视图目录中找不到这些文件?啊!这就是为什么我开始讨厌玩了!现在我必须搜索所有关于如何为2.0.x做到这一点的信息
import javax.inject.{Inject, Singleton}
import play.api.http.DefaultHttpErrorHandler
import play.api.mvc.Results._
import play.api.mvc.{RequestHeader, Result}
import scala.concurrent.{ExecutionContext, Future}
@Singleton
class ErrorHandler @Inject()(implicit executionContext:ExecutionContext) extends DefaultHttpErrorHandler{
override def onServerError(request: RequestHeader, exception: Throwable): Future[Result] = {
exception match {
case e:scala.MatchError => Future(Ok("Page Not Found"))
case _ => Future(Ok("Internal Server Error :("))
}
}
}