「views.barcodePackage.tags」パッケージに保存されたこのテンプレート「barcode.scala.html」を含む Play Framework モジュール「Ean2BarcodePlayModule」を作成しました。
@(ean: Long)
<img class="barcode" alt="@ean" src="@controllers.barcodePackage.BarcodeController.getBarcode(ean)" />
「activator publish-local」を使用した後、テスト プロジェクトの「index.scala.html」テンプレートでこれを参照しました。
@(message: String)
@main("Welcome to Play") {
@barcodePackage.tags.barcode(5010255079763L)
}
期待される結果は
<!-- Redacted for brevity -->
<img class="barcode" alt="5010255079763" src="/barcodeRoutes/5010255079763">
<!-- Redacted for brevity -->
しかし、実際の結果は次のとおりです。
<!-- Redacted for brevity -->
<img class="barcode" alt="5010255079763" src="Action(parser=BodyParser(anyContent))">
<!-- Redacted for brevity -->
注目されるように、コントローラーのアクション メソッド メソッドの戻り値の型は、代わりにソース URL があるべき場所に表示されますが、なぜそれが起こっているのか、またはそれを修正する方法がわかりません。
モジュールには、「barcodePackage.routes」に次の行が含まれています。
GET /:ean controllers.barcodePackage.BarcodeController.getBarcode(ean:Long)
一方、テスト プロジェクトのルート ファイルには次のものが含まれます。
-> /barcodeRoutes barcodePackage.Routes
これは、モジュール コントローラーのコードです。
package controllers.barcodePackage
import models.barcodePackage.Barcode
import play.api.mvc.{Action, Controller}
import play.api.libs.concurrent.Execution.Implicits._
import scala.util.{Failure, Success}
/**
* Created by Brian_Kessler on 3/11/2015.
*/
object BarcodeController extends Controller
{
def getBarcode(ean:Long) = Action.async{
Barcode.renderImage(ean) map {
case Success(imageData) => Ok(imageData).as(Barcode.mimeType)
case Failure(error) => BadRequest("Couldn't generate bar code. Error: " + error.getMessage)
}
}
}
ノート:
最も重要なことは、モジュールの機能が期待どおりに機能することです。
しかし、モジュールを組み込んだプロジェクト内でルートをすべて個別に転写する必要があるのではなく、モジュール内でルートを正常に指定できるソリューションも好みます。