2015-04-19 54 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) 
    ) 
    } 
}