簡體   English   中英

PlayFramework2.4.x中的自定義錯誤頁面

[英]Custom Error Page in 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添加了application.global = "MyGlobal" in application.conf

但是沒有任何反應, play2.4.6仍然會耗盡devframe framework/play/src/main/scala/views/defaultpages/playframework源文件夾中devNotFound.scala.html中的默認頁面

請幫忙。

在Play 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"
public class Global extends GlobalSettings {

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

在此處輸入圖片說明

    @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中我幾乎迷失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM