【发布时间】:2014-11-05 15:41:18
【问题描述】:
以下模板通过将图像作为字节数组并将其编码为 Base64 来显示 PNG 图像:
@(img: Array[Byte])
<img src="data:image/png;base64,@java.util.Base64.getEncoder.encodeToString(img)">
该模板适用于使用 Scala 作为主要语言的 Play 项目:
(lazy val root = (project in file(".")).enablePlugins(PlayScala))
但是,如果一个项目使用 Java 作为其主要语言:
(lazy val root = (project in file(".")).enablePlugins(PlayJava))
运行项目时出现如下错误:
[error] C:\Java\workspace\test\app\views\imgbase64.scala.html:2: type mismatch;
[error] found : Array[java.lang.Byte]
[error] required: Array[scala.Byte]
[error] <img src="data:image/png;base64,@java.util.Base64.getEncoder.encodeToString(img)">
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
这是 Scala 2.11.4 和 Play 2.3.6
即使 Play 项目配置为使用 Java,为什么模板在这里需要 Scala 字节而不是 Java 字节?
【问题讨论】:
-
如果你用
@(img: Array[java.lang.Byte])完全限定类型会发生什么? -
不幸的是,没有任何变化 - 模板已经将参数类型视为 Array[java.lang.Byte],因此完全限定它并不能解决问题。
-
我的意思是改变模板。你的意思是你得到编译错误?
-
一个愚蠢的问题,但是您是否重新启动了您的
sbt?你试过clean compile吗? -
完全限定参数类型不会改变任何东西,因为模板已经看到了正确的类型 (
Array[java.lang.Byte]),看看它在哪里显示[error] found : Array[java.lang.Byte]。问题是它希望找到Array[scala.Byte],我正试图了解原因。
标签: scala templates playframework playframework-2.0