5

我正在与 Play 合作!框架 1.2.4 并且创建静态 404 页面没有问题。但是,我想让 404 页面更具动态性。

404 页面是否有“控制器”?如果没有,我在哪里执行传统上会在控制器中执行的所有逻辑?

4

5 回答 5

5

404 页面没有控制器。尝试查找路线,如果这不可能,则抛出显示 404 页面的 NotFound Result。

您可以创建一个 catch all 控制器来执行此工作,以便该控制器将处理 404 情况而不是 Play 本身。

 *       /.*     NotFoundRouter.notFoundPage
于 2012-09-03T06:32:42.883 回答
3

正如 Nasir 所说,您可以在任何控制器中使用 NotFound Action 进行响应以返回 404 响应。我们通常使用 Ok Action 来响应正确的 200 Http 响应代码。一个例子(播放 2 - 不确定它是否适用于播放 1):

object BadgeEvidence extends Controller {
  def index(badgeName: String, earner: String) = Action {
    val badgeResponse = BadgeDao.getBadgeDetail(badgeName)
    val evidence = BadgeDao.getBadgeEvidence(badgeName, earner)
    if (evidence.length == 0) {
        NotFound(earner + " is not valid or has not earned " + badgeName);
    } else {
      badgeResponse match {
        case badgeDetail: BadgeRow => Ok(views.html.badgeEvidence(earner, badgeDetail, evidence))
        case errorMessage: String => Ok(views.html.showError(errorMessage))
      }
    }
  }
}
于 2012-12-17T00:25:14.073 回答
1

您可以使用 GlobalSettings.onHandlerNotFound() 来处理将获得 404 响应的请求。

http://www.playframework.org/documentation/api/2.0.3/java/play/GlobalSettings.html

于 2012-09-03T14:41:22.617 回答
0

app/views/errors/404.html您可以在模板文件中进行一些编码。

于 2012-09-17T16:07:55.963 回答
0

好吧,我不确定你打算让它有多动态。在内心深处,NotFound类负责加载 404.html。也许,它对你有用。

于 2012-11-19T01:31:58.423 回答