質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework

Play Frameworkは、現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Q&A

0回答

1549閲覧

playframework2.2から2.8にjava8からjava11の移行でMessagesProviderとi18n.Lang のエラー

rosemain

総合スコア0

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Play Framework

Play Frameworkは、現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

0グッド

0クリップ

投稿2020/10/26 02:12

編集2020/10/26 02:17

概要

play frameworkで書かれているプログラムの

java8からjava11のバージョンアップ作業をしています。

javaのバージョンアップに伴いplay frameworkも2.2から、 2.8に上げて、

scalaVersion := "2.13.2",

sbt-plugin" % "2.8.1"

sbt-play-ebean" % "6.0.0"

sbt.version=1.4.0

のバージョンに変更しました。

移行手順などを見て、エラーを解決していったのですが、

  1. エラー内容は変わったが、解決できているのかがわからないエラー

  2. 解決法がまだわからないもの

の2つで悩んでいます。

scala・playframeworkを今回の移行作業で初めて触り、

2週間程度の経験しかありません

javaも業務としての経験はないのですが 、
どうしても、やらないといけない状況で...

詳しい方いらっしゃいましたら、

大変お手数おかけいたしますが、

かんたんに説明していただけると幸いです。

MessagesProvider のエラー

下記のエラーが出ました。

[error]/target/scala-2.13/twirl/main/helpers/html/hyperlinkButton.template.scala:43:101: An implicit MessagesProvider instance was not found. Please see https://www.playframework.com/documentation/latest/ScalaForms#Passing-MessagesProvider-to-Form-Helpers

このエラーに関して調べると下記のページが見つかりましたが

https://stackoverflow.com/questions/47280371/implicit-messages-provider-instance-was-not-found-in-play-framework-with-scala

https://www.playframework.com/documentation/2.6.x/ScalaForms#Passing-MessagesProvider-to-Form-Helpers

app/controllers配下のファイルがすべて.javaで書かれてて、同じようにはかけませんでしたので、javaでも動作する形に変更しました。

/Application.java

java

1public class Application extends Controller {

から

java

1 import javax.inject.*; 2 import play.api.i18n.I18nSupport; 3 import play.api.mvc.AbstractController; 4 public class Application extends AbstractController implements I18nSupport { 5 @Inject 6 private ControllerComponents Components;

scala.html

scala

1@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: views.html.helper.FieldConstructor) 2@import helpers.ScalaUtility._ 3@inputType = @{ args.toMap.get('type).map(_.toString).getOrElse("text") } 4@args2 = @{addInpytTypeToClass(field, args)} 5@args3 = @{args2.applyLabelToPlaceholder} 6@views.html.helper.input(field, args3.filter(_._1 != 'type):_*) { (id, name, value, htmlArgs) => 7 @** NAI-560 **@ 8 <textarea id="@id" name="@name" @field.getMaxLengthOption@toHtmlArgs(htmlArgs)>@value</textarea> 9 <input class="btn btn-info hyperlinkButton" type="button" value="表示">@args.getSuffix@args.getSuffixHtml

の先頭行の部分を下記の様にMessagesProviderを追記することによってエラー内容は変わりましたが、

scala

1@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: views.html.helper.FieldConstructor, lang: play.api.i18n.Lang, messagesProvider: play.api.i18n.MessagesProvider) 2

上記の解決策で正しいのかが判断つきません。

Langのエラー2.6の仕様変更が原因?

下記のエラーが出ました。

scala

1[error] /target/scala-2.13/twirl/main/helpers/html/myTwitterBootstrapFieldConstructor.template.scala:38:58: Any does not take parameters 2[error] """),_display_(/*8.14*/elements/*8.22*/.label(elements.lang)),format.raw/*8.43*/("" 3[error]

該当しそうなテンプレート部分のコードは下記です。

scala.html

scala

1@(elements: views.html.helper.FieldElements) 2@import play.api.i18n._ 3@import views.html.helper._ 4<div class="clearfix @elements.args.get('_class) 5 @if(elements.hasErrors) {error}" id="@elements.args.get('_id).getOrElse(elements.id + "_field")"> 6 <label for="@elements.id"> 7 @elements.label(elements.lang) 8 </label> 9 @if(elements.args.get('_label2)){ 10 <label for="@elements.id"> 11 @elements.args.get('_label2) 12 </label>} 13 <div class="input">@elements.input@if(elements.errors.size>0){<br><span class="help-inline"> 14 @elements.errors(elements.lang).mkString(", ")</span>} 15 </div> 16</div> 17

2.2ではhelper.FieldElementslangが使えるのに対し、(下記URL)

https://www.playframework.com/documentation/2.2.x/api/scala/index.html#views.html.helper.FieldElements

2.8ではhelper.FieldElementslangが使えなくなっていて、(下記URL)

https://www.playframework.com/documentation/2.8.x/api/scala/views/html/helper/FieldElements.html

これは下記の移行て手順に書いてある、I18nSupport暗黙の変換のことだと思うのですが、

どう解決していいのかがわかりません。

https://www.playframework.com/documentation/2.8.x/MessagesMigration26

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rysh

2020/11/17 10:18

PlayframeworkはJavaでもScalaでも動かせますが、Scalaで動かしている場合にあJavaのファイルを作る必要はありません。 調べてる時にJava用の解説ページに迷い込んでしまったかと思うので、Javaに変えた部分は一度戻したほうがいいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問