概要
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
のバージョンに変更しました。
移行手順などを見て、エラーを解決していったのですが、
-
エラー内容は変わったが、解決できているのかがわからないエラー
-
解決法がまだわからないもの
の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
このエラーに関して調べると下記のページが見つかりましたが
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.FieldElements
にlang
が使えるのに対し、(下記URL)
2.8ではhelper.FieldElements
にlang
が使えなくなっていて、(下記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
よろしくおねがいします。
あなたの回答
tips
プレビュー