我测试期货的方式是使用value1.我迁移到了play2.2.我发现,我习惯的测试方法已经消失了.@ scala.deprecated("使用scala.concurrent.Promise代替.","2.2")
任何帮助将不胜感激.
奥利弗
我正在尝试创建一个自定义play.api.mvc.Action
,可用于CustomerAccount
根据请求填充a 并传递CustomerAccount
到控制器.
继对播放2.2.x的文档,我创建了一个Action
和ActionBuilder
,但我似乎无法返回CustomerAccount
从动作中.
我目前的代码是:
case class AccountWrappedRequest[A](account: CustomerAccount, request: Request[A]) extends WrappedRequest[A](request)
case class Account[A](action: Action[A]) extends Action[A] {
lazy val parser = action.parser
def apply(request: Request[A]): Future[SimpleResult] = {
AccountService.getBySubdomain(request.host).map { account =>
// Do something to return the account like return a new AccountWrappedRequest?
action(AccountWrappedRequest(account, request))
} getOrElse {
Future.successful(NotFound(views.html.account_not_found()))
}
}
}
object AccountAction extends ActionBuilder[AccountWrappedRequest] {
def invokeBlock[A](request: Request[A], block: (AccountWrappedRequest[A]) => …
Run Code Online (Sandbox Code Playgroud) 运行Play Framework 2.2.x(Java)项目时出现以下错误:
Configuration error
Cannot register class [models.SomeClass] in Ebean server
Run Code Online (Sandbox Code Playgroud)
浏览器中显示的错误消息将我指向我的行ebean.default="models.*"
,application.conf
控制台告诉我我的java.lang.VerifyError: Bad type on operand stack
一个方法.对于这种情况发生的方法没有什么特别之处,现在已经发生了一些方法.
我发现使用静态方法可以避免错误:即替换someObject.doJob()
为SomeClass.doJob(someObject)
.我已经使用过这个hack,它可以工作,但是我不是很高兴我的所有方法都应该是静态的.
有没有人遇到同样的问题,并找到了解决方法(不使方法静态)?
我正在尝试使用play框架连接到mysql数据库.从我自己的搜索,我知道我需要在某处添加此行:
"mysql" % "mysql-connector-java" % "5.1.18"
但是,在每个文档/类似问题中,它都表示此行或者进入Build.scala
文件或build.sbt
文件,而我没有这些文件.当我创建我的应用程序(作为一个Java应用程序)时,它只给了我一个build.properties
,plugins.sbt
它在项目文件夹中.
有谁知道如何添加这条线?我需要创建其中一个文件吗?
我的build.properties
档案:
sbt.version=0.13.0
Run Code Online (Sandbox Code Playgroud)
和
plugins.sbt
// Comment to get more information during initialization
logLevel := Level.Warn
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1")
Run Code Online (Sandbox Code Playgroud)
更新:添加后
addSbtPlugin("mysql" % "mysql-connector-java" % "5.1.18")
到我的插件文件:
我在play framework 2.2上开发应用程序我有一个像这样的路由文件:
GET /posting/ controllers.posting.BlogController.allPosts()
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
Run Code Online (Sandbox Code Playgroud)
和BlogContriller:
object BlogController extends Controller {
def allPosts(pageNumber:Int = 1, postsPerPage:Int = 10) = Action{
val posts = Post.getLastNPosts(postsPerPage, postsPerPage*(pageNumber-1))
val htmlPosts = new Html(new StringBuilder());
for (post <- posts){
val htmlPost = views.html.posting.post(post.getName, post.getText, post.getDate.toString)
htmlPosts += htmlPost;
}
Ok(views.html.posting.index(htmlPosts))
}
}
Run Code Online (Sandbox Code Playgroud)
当我试图加入时,我给出了一个错误:
Error:(14, -1) Play 2 Compiler: C:\...\conf\routes:14: Compilation error[Using different overloaded methods is not allowed. If you are using a single method in combination with default parameters, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Scala的2.2版本,如何从build.sbt获取版本?
name := "project_name"
version := "0.2-SNAPSHOT"
play.Project.playScalaSettings
Run Code Online (Sandbox Code Playgroud)
或者我如何从另一个对象传递值?
我正在用Java中的Playframework 2.2编写一个webapp.现在我想添加一个小的独立文本到数据库导入工具,它只包含一个带有main
方法的Java文件:
public static void main(String[] args) {
importTextToDatabase();
}
Run Code Online (Sandbox Code Playgroud)
activator
(或sbt
)(没有webapp)中运行它?我们开发了一个带有游戏2.2.3的Web应用程序,并希望对其进行模糊处理.我正在尝试使用sbt-proguard插件.我将下面的行放在PROJECT_FOLDER/project/plugins.sbt文件中
addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")
Run Code Online (Sandbox Code Playgroud)
并将下面的行放在PROJECT_FOLDER/build.sbt文件中
proguardSettings
ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings")
ProguardKeys.options in Proguard += ProguardOptions.keepMain("Application")
inConfig(Proguard)(javaOptions in ProguardKeys.proguard := Seq("-Xmx2g"))
Run Code Online (Sandbox Code Playgroud)
当我在播放控制台和插件网站上说dist时,我不确定proguard是否正常工作他们说调用proguard:proguard.当我在play console上编写proguard:proguard时,Play会给出错误,如下所示
[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/local/net.sf.ehcache/ehcache-core/2.6.6/jars/ehcache-core.jar] (filtered)
[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/cache/org.json/json/jars/json-20140107.jar] (filtered)
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/jce.jar]
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/rt.jar]
[error] Error: The output jar is empty. Did you specify the proper '-keep' options?
[trace] Stack trace suppressed: run …
Run Code Online (Sandbox Code Playgroud) rest api的JS客户端可以将int和string作为某个字段的值发送.
{
field1: "123",
field2: "456"
}
{
field1: 123,
field2: 456
}
Run Code Online (Sandbox Code Playgroud)
以下是应该转换json请求正文的case类的play动作:
case class Dto(field1: Int, field2: Int)
object Dto {
implicit val reads = Json.reads[Dto]
}
def create = Action.async(BodyParsers.parse.json) { implicit request =>
request.body.validate[Dto].map {
dto => someService.doStuff(dto).map(result => Ok(Json.toJson(result)))
}.recoverTotal {
e => jsErrorToBadRequest(e)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我发送带有int值的json值,它可以正常工作.但是如果field1或field2是字符串("123","456"),它就会失败,因为request.body.validate需要Int.
但问题是JS客户端从输入字段发送值,输入字段转换为字符串.
处理整数或字符串的最佳方法是什么?(所以这个动作应该在两种情况下都将json转换为dto)
我们正在使用Play 2.7(Java)进行制作.我们有一组常见的Ebean模型(作为外部库/ jar),它们在不同的Play项目之间共享,但我们因Play Evolutions脚本而陷入困境.有没有什么方法可以从外部文件夹/ jar加载这些脚本(.sql文件)?有没有人试过这个?
已经尝试在线搜索解决方案但没有用.需要有Play游戏经验的人的帮助.还请建议是否有其他方法来解决问题.感谢您的帮助!
目前,该项目正在从这里运行这些迁移脚本:
--> project
--> app
--> conf
--> evolutions
--> default <-- from here
Run Code Online (Sandbox Code Playgroud)
我想从这里的某个地方加载这些脚本:
--> project
--> app
--> External Libraries
--> group.artifact.version.jar
--> models
--> default <-- from here
Run Code Online (Sandbox Code Playgroud)