2016-01-13 46 views
0

我做这些,但还是无法看到我的自定义页面,请大家帮忙,自定义错误页在PlayFramework2.4.x

  1. 新增MyGlobal.java extends GlobalSettings

  2. 新增onHandlerNotFound覆盖:

    @Override public F.Promise<Result> onHandlerNotFound(RequestHeader request) { Logger.error("onHandlerNotFound!"); return Promise.<Result> pure(Results.internalServerError(views.html.page404.render())); }

  3. 已添加application.global = "MyGlobal" in application.conf

但没有什么happends,play2.4.6仍然用完从devNotFound.scala.html默认页面playframeworkframework/play/src/main/scala/views/defaultpages/

请帮助源文件夹。

回答

2

做到在播放2.4.x的方式是使用HttpErrorHandler作为记录在这里:

https://www.playframework.com/documentation/2.4.x/JavaErrorHandling

你可以只延伸DefaultHttpErrorHandler并添加返回您的自定义页面:

  1. https://www.playframework.com/documentation/2.4.x/JavaErrorHandling#Extending-the-default-error-handler
  2. https://www.playframework.com/documentation/2.4.x/api/java/play/http/DefaultHttpErrorHandler.html

下面是一个完整的例子,考虑到你正在试图覆盖默认的404页:

package com.acme.controllers.handlers; 

import play.*; 
import play.api.OptionalSourceMapper; 
import play.api.UsefulException; 
import play.api.routing.Router; 
import play.http.DefaultHttpErrorHandler; 
import play.libs.F.*; 
import play.mvc.Http.*; 
import play.mvc.*; 

import javax.inject.*; 

public class ErrorHandler extends DefaultHttpErrorHandler { 

    @Inject 
    public ErrorHandler(Configuration configuration, Environment environment, 
         OptionalSourceMapper sourceMapper, Provider<Router> routes) { 
     super(configuration, environment, sourceMapper, routes); 
    } 

    @Override 
    protected Promise<Result> onNotFound(RequestHeader request, java.lang.String message) { 
     Logger.error("onHandlerNotFound!"); 
     return Promise.pure(Results.internalServerError(views.html.page404.render())); 
    } 
} 

然后,你需要在你conf/application.conf配置是这样的:

play.http.errorHandler = "com.acme.controllers.handlers.ErrorHandler" 
+0

所以你只是把我们指向文档?举个例子呢? (没有文档是不够的...不要拨打视图或特定页面) –

+0

@ PiNg2Eiw对不起,对于这种情况,我认为文档就足够了。无论如何,我已经添加了一个完整的例子。 – marcospereira

+0

不错的例子;谢谢 –

1
public class Global extends GlobalSettings { 

    @Override 
    public Promise<SimpleResult> onHandlerNotFound(RequestHeader request) { 
     return Promise.<SimpleResult>pure(internalServerError(views.html.page404.render())); 
    } 
} 
+0

你能否向你的代码添加一些解释?没有解释的答案没有帮助。 –

0

enter image description here

@Override 
protected F.Promise<Result> onNotFound(RequestHeader request, String message) { 
    Logger.debug("onNotFound: " + message); 
    return Promise.<Result> pure(Results 
      .ok(views.html.admin.page404.render(request.method(), request.uri()))); 
} 

感谢您的帮助,它确实在开发环境中工作。

我已经有了MyErrorHandler.java,但没有覆盖onNotFound函数,因为我在扩展的GlobalSettings的onHandlerNotFound中几乎失去了。

+0

是的,接受他的答案怎么样?如果你觉得有人帮助你,那么接受他/她的回答。这是SO的工作原理。 –

+0

@ PiNg2Eiw是的,我只是点击:)。也谢谢你帮助我如何接受我的第一个问题在stackoverflow。 – nikkofu