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

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

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

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

Java

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

Play Framework

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

受付中

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

rosemain
rosemain

総合スコア0

Scala

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

Java

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

Play Framework

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

0回答

0評価

0クリップ

6閲覧

投稿2020/10/26 02:12

編集2022/01/12 10:55

概要

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

public class Application extends Controller {

から

java

import javax.inject.*; import play.api.i18n.I18nSupport; import play.api.mvc.AbstractController; public class Application extends AbstractController implements I18nSupport { @Inject private ControllerComponents Components;

html.scala

scala

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

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

scala

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

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

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

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

scala

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

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

html.scala

scala

@(elements: views.html.helper.FieldElements) @import play.api.i18n._ @import views.html.helper._ <div class="clearfix @elements.args.get('_class) @if(elements.hasErrors) {error}" id="@elements.args.get('_id).getOrElse(elements.id + "_field")"> <label for="@elements.id"> @elements.label(elements.lang) </label> @if(elements.args.get('_label2)){ <label for="@elements.id"> @elements.args.get('_label2) </label>} <div class="input">@elements.input@if(elements.errors.size>0){<br><span class="help-inline"> @elements.errors(elements.lang).mkString(", ")</span>} </div> </div>

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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

rysh
rysh

2020/11/17 10:18

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Scala

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

Java

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

Play Framework

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