Playフレームワークは初めてで、ローカルマシンのhelloworldサンプルを模倣しようとしましたが、エラーが発生しました。
ルート:
# Home page
GET / controllers.Application.index
# Hello action
GET /hello controllers.Application.sayHello
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
コントローラー:
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views._
class Application extends Controller {
val helloForm = Form(
Tuple(
"name" -> nonEmptyText,
"repeat" -> number(min = 1, max = 100),
"color" -> optional(text)
)
)
def index = Action {
Ok(html.index(helloForm))
}
def sayHello = Action { implicit request =>
helloForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.index(formWithErrors)),
{case (name, repeat, color) => Ok(html.hello(name, repeat.toInt, color))}
)
}
}
表示:
@(helloForm: Form[(String,Int,Option[String])])
@import helper._
@main(title = "The 'helloworld' application") {
<h1>Configure your 'Hello world':</h1>
@form(action = routes.Application.sayHello, args = 'id -> "helloform") {
@inputText(
field = helloForm("name"),
args = '_label -> "What's your name?", 'placeholder -> "World"
)
@inputText(
field = helloForm("repeat"),
args = '_label -> "How many times?", 'size -> 3, 'placeholder -> 10
)
@select(
field = helloForm("color"),
options = options(
"" -> "Default",
"red" -> "Red",
"green" -> "Green",
"blue" -> "Blue"
),
args = '_label -> "Choose a color"
)
<p class="buttons">
<input type="submit" id="submit">
<p>
}
}
Play 2.4をインストールし、IntelliJ Idea 14を使用してactivatorテンプレートを使用してプロジェクトを作成しました。
ビューにimplicit messages
パラメータを追加した後、次のインポートを追加し、追加の変更なしで古いコントローラクラスまたはオブジェクトを使用できます。
import play.api.Play.current
import play.api.i18n.Messages.Implicits._
ビューフォームヘルパー(@inputText
など)を使用するには、暗黙的なplay.api.i18n.Messages
パラメーターをビューに渡す必要があります。これを行うと、ビューの署名に(implicit messages: Messages)
を追加できます。あなたの見解はこれになります:
@(helloForm: Form[(String,Int,Option[String])])(implicit messages: Messages)
@import helper._
@main(title = "The 'helloworld' application") {
<h1>Configure your 'Hello world':</h1>
...
次に、アプリケーションコントローラーで、このパラメーターをスコープで暗黙的に使用可能にする必要があります。これを行う最も簡単な方法は、playのI18nSupport
特性を実装することです。
あなたの例では、これは次のようになります。
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import javax.inject.Inject
import play.api.i18n.I18nSupport
import play.api.i18n.MessagesApi
import views._
class Application @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport {
val helloForm = Form(
Tuple(
"name" -> nonEmptyText,
"repeat" -> number(min = 1, max = 100),
"color" -> optional(text)
)
)
def index = Action {
Ok(html.index(helloForm))
}
def sayHello = Action { implicit request =>
helloForm.bindFromRequest.fold(
formWithErrors => BadRequest(html.index(formWithErrors)),
{case (name, repeat, color) => Ok(html.hello(name, repeat.toInt, color))}
)
}
}
コントローラーでは、もちろんMessagesApi
の独自の実装を使用できます。 playはMessagesApi
をインジェクトする方法をデフォルトで知っているので、コントローラーに@Inject
の注釈を付けて、playに作業を任せることができます。
マティアスブラウンが言ったように、あなたも設定する必要があります
routesGenerator := InjectedRoutesGenerator
あなたのbuild.sbt
I18nの詳細については、 https://www.playframework.com/documentation/2.4.x/ScalaI18N を参照してください。
フォームヘルパーを使用するには、暗黙的なplay.api.i18n.Messages
パラメーターをビューに渡す必要があります。ビューに(implicit messages: Messages)
を追加してこれを行うことができます。あなたの見解はこれになります:
@(contacts: List[models.Contact],
form: Form[models.Contact])(implicit messages: Messages)
次に、手動でコントローラーに注入します
import play.api.data.Forms._
import javax.inject.Inject
import play.api.i18n.I18nSupport
import play.api.i18n.MessagesApi
最後にメインインデックスコントローラークラスに追加します
class Application @Inject()(val messagesApi: MessagesApi) extends
Controller with I18nSupport {