我正在与 Play 合作!框架 1.2.4 并且创建静态 404 页面没有问题。但是,我想让 404 页面更具动态性。
404 页面是否有“控制器”?如果没有,我在哪里执行传统上会在控制器中执行的所有逻辑?
我正在与 Play 合作!框架 1.2.4 并且创建静态 404 页面没有问题。但是,我想让 404 页面更具动态性。
404 页面是否有“控制器”?如果没有,我在哪里执行传统上会在控制器中执行的所有逻辑?
404 页面没有控制器。尝试查找路线,如果这不可能,则抛出显示 404 页面的 NotFound Result。
您可以创建一个 catch all 控制器来执行此工作,以便该控制器将处理 404 情况而不是 Play 本身。
* /.* NotFoundRouter.notFoundPage
正如 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))
}
}
}
}
您可以使用 GlobalSettings.onHandlerNotFound() 来处理将获得 404 响应的请求。
http://www.playframework.org/documentation/api/2.0.3/java/play/GlobalSettings.html
app/views/errors/404.html
您可以在模板文件中进行一些编码。
好吧,我不确定你打算让它有多动态。在内心深处,NotFound类负责加载 404.html。也许,它对你有用。