我创建了一个播放框架模块“Ean2BarcodePlayModule”,其中包括保存在“views.barcodePackage.tags”包中的这个模板“barcode.scala.html”:
@(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)
}
}
}
笔记:
最重要的是,我希望看到模块功能按预期工作。
但我也更喜欢一种解决方案,它允许我在模块中成功指定路由,而不是被要求在包含模块的项目中单独转录它们。