2016-01-13 58 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