Я создал модуль Play Framework «Ean2BarcodePlayModule», который включает этот шаблон «barcode.scala.html», сохраненный в пакете «views.barcodePackage.tags»:
@(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)
}
}
}
Примечания:
Самое главное, я хотел бы, чтобы функциональность модуля работала должным образом.
Но я также предпочел бы решение, которое позволяет мне успешно указывать маршруты внутри модуля, а не расшифровывать их все по отдельности в проектах, включающих модуль.