私はPlayで働いています!フレームワーク 1.2.4 であり、静的 404 ページの作成に問題はありません。ただし、404 ページをもう少し動的にしたいと考えています。
404 ページの「コントローラー」はありますか? そうでない場合、従来はコントローラーで行っていたすべてのロジックをどこで実行すればよいでしょうか?
私はPlayで働いています!フレームワーク 1.2.4 であり、静的 404 ページの作成に問題はありません。ただし、404 ページをもう少し動的にしたいと考えています。
404 ページの「コントローラー」はありますか? そうでない場合、従来はコントローラーで行っていたすべてのロジックをどこで実行すればよいでしょうか?
404 ページのコントローラーはありません。Play はルートを見つけようとしますが、これが不可能な場合は、404 ページを示す NotFound Result をスローします。
このジョブを実行する catch all コントローラーを作成して、このコントローラーが Play 自体ではなく 404 ケースを処理するようにすることができます。
* /.* NotFoundRouter.notFoundPage
Nasir が言ったように、どのコントローラーでも NotFound アクションで応答して 404 応答を返すことができます。通常、適切な 200 Http 応答コードの Ok アクションで応答します。例 (プレイ 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
テンプレートファイル内でコーディングを行うことができます。