我是Play框架的新手并尝试在我的本地机器中模仿helloworld示例,但是我遇到了一个错误:
路线:
# Home page
GET / controllers.Application.index
# Hello action
GET /hello controllers.Application.sayHello
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Run Code Online (Sandbox Code Playgroud)
控制器:
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views._
class Application extends Controller {
val helloForm = Form(
tuple(
"name" -> nonEmptyText,
"repeat" -> number(min = 1, max = 100),
"color" -> optional(text)
)
)
def index = Action {
Ok(html.index(helloForm))
}
def sayHello …
Run Code Online (Sandbox Code Playgroud) 我正在使用Play 2.4.0并且我一直在尝试按照主页中的教程:https: //playframework.com/,这是针对Play 2.3以及解决了有关Ebean ORM更改的几个问题之后版本2.3到2.4,我遇到以下错误:
Compilation error
value at is not a member of controllers.ReverseAssets
Run Code Online (Sandbox Code Playgroud)
我的index.scala.html
:
@(message: String)
@main("Welcome to Play") {
<script type='text/javascript' src="@routes.Assets.at("javascripts/index.js")"></script>
<form action="@routes.Application.addPerson()" method="post">
<input type="text" name="name" />
<button>Add Person</button>
</form>
<ul id="persons">
</ul>
}
Run Code Online (Sandbox Code Playgroud)
我的routes
档案:
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index()
POST /person controllers.Application.addPerson()
GET /persons controllers.Application.getPersons()
# Map static resources from the /public …
Run Code Online (Sandbox Code Playgroud) 我们正在开发一个Play 2.4应用程序(Java API).
出于开发目的,我们希望使用具有相对于项目根目录的DB文件路径的持久H2数据库.
在如何在Play Framework中使用持久性H2数据库而不是内存中有Play 2.0的解决方案:
db.default.url="jdbc:h2:file:data/db"
Run Code Online (Sandbox Code Playgroud)
但是,使用Play 2.4这似乎不起作用,但我收到错误消息,底部有以下异常:
Caused by: org.h2.jdbc.JdbcSQLException: A file path that is implicitly
relative to the current working directory is not allowed in the database
URL "jdbc:h2:file:data/db". Use an absolute path, ~/name, ./name, or the
baseDir setting instead. [90011-187]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
...
Run Code Online (Sandbox Code Playgroud)
我可以使用绝对路径和相对于主目录的路径来连接工作,如下所示:
db.default.url="jdbc:h2:file:/Users/foo/data/db"
Run Code Online (Sandbox Code Playgroud)
要么
db.default.url="jdbc:h2:~/data/db"
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法引用项目根文件夹?
PlayFramework Json库中Writes [-A]和OWrites [-A]之间有什么区别?我使用过Writes [A],但我无法弄清楚OWrites的目的是什么.同样的问题适用于格式[A]与OFormat [A].
为了在给定的秒数内缓存每个标签和语言的操作,我编写了以下帮助器方法(其中label,是我给我的操作赋予的名称):
def cacheResponseFor(label: String, duration: Int)(action: EssentialAction) = {
Cached({r: RequestHeader => (label + getLanguage(r))}, duration){ action }
}
def getLanguage(request: RequestHeader): String = {
request.cookies
.get(helpers.SessionHelpers.LANGUAGE_SESSION)
.map(_.value)
.getOrElse(helpers.LanguageHelpers.FRENCH)
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了一些奇怪的事情,当我尝试缓存一个Action
60秒并在此期间将语言切换为法语时,我会继续使用法语版本60秒然后切换到英语.
在调查之后,我发现getLanguage
在每次调用该操作时都不会调用该方法,就好像Key仅在缓存期结束后才进行评估.
这是不对的,我希望cacheResponseFor
每当我请求我的页面时调用它,语言得到评估使用getLanguage
,我得到正确的缓存版本,即我最终应该有2个缓存操作(每种语言一个).
我错过了什么吗?
我正在使用PlayFramework 2.4.6,尝试上传多部分文件(大小为18M),服务器返回以下错误:
For request 'POST /api/myEndpoint' [Request Entity Too Large]
Run Code Online (Sandbox Code Playgroud)
我环顾四周,尝试了下面的成功:
而且他们都没有解决问题.
这是Stacktrace:
Run Code Online (Sandbox Code Playgroud)14:57:33.128 [New I/O worker #2] [error] - p.c.server.netty.RequestBodyHandler - Exception caught in RequestBodyHandler java.nio.channels.ClosedChannelException: null at org.jboss.netty.channel.socket.nio.AbstractNioWorker.setInterestOps(AbstractNioWorker.java:506) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.nio.AbstractNioWorker$1.run(AbstractNioWorker.java:455) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:391) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:315) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) [netty-3.10.4.Final.jar:na] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) [netty-3.10.4.Final.jar:na] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.10.4.Final.jar:na] at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [netty-3.10.4.Final.jar:na] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_65] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_65] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
我试图在IntelliJ中打开一个2.4项目,但由于事情发生了变化,我不知道该怎么做.
在以前的版本中,我可以运行
activator idea
Run Code Online (Sandbox Code Playgroud)
或者使用激活器UI并单击生成intelliJ项目,但在2.4中,idea命令似乎不存在
[error] Not a valid command: idea (similar: eval, alias)
[error] Not a valid project ID: idea
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: idea (similar: clean)
[error] idea
[error] ^
Run Code Online (Sandbox Code Playgroud)
UI似乎坏了,当我点击生成intelliJ项目时,它试图编译应用程序并给出这个错误:
play/Play$
java.lang.NoClassDefFoundError: play/Play$
Use 'last' for the full log.
Failed to load project.
Run Code Online (Sandbox Code Playgroud)
我使用play java模板从头开始创建项目:
activator new
Run Code Online (Sandbox Code Playgroud)
我也尝试将该文件夹导入为项目,但是intelliJ似乎并未将其标识为项目
intellij-idea playframework typesafe-activator playframework-2.4
如何在日志中显示SQL语句?我正在使用EBeans,但由于某些原因它无法插入,但我看不出有什么问题.
我尝试将配置编辑为:
db.default.logStatements=true
Run Code Online (Sandbox Code Playgroud)
并将其添加到logback.xml
<logger name="com.jolbox" level="DEBUG" />
Run Code Online (Sandbox Code Playgroud)
按照我在网上找到的一些答案,但它似乎不适用于2.4 ......
我试图在应用程序启动时打印"Hello"到控制台.你能解释一下怎么做吗?
我自己尝试了什么:
app/modules/HelloModule.scala
:
package modules
import com.google.inject.AbstractModule
trait Hello {}
class MyHelloClass extends Hello {
initialize() // running initialization in constructor
def initialize() = {
println("Hello")
}
}
class HelloModule extends AbstractModule {
def configure() = {
bind(classOf[Hello])
.to(classOf[MyHelloClass]).asEagerSingleton
}
}
Run Code Online (Sandbox Code Playgroud)
在conf/application.conf
我补充说:
play.modules.enabled += "modules.HelloModule"
Run Code Online (Sandbox Code Playgroud)
我跑的时候不会打印"你好" activator run
有没有办法避免在代码更改后重新加载时重新连接到内存数据库的连接池?
[info] - application - Shutting down connection pool.
[info] - application - Creating Pool for datasource 'default'
[info] - play.api.db.DefaultDBApi - Database [default] connected at jdbc:h2:mem:play
Run Code Online (Sandbox Code Playgroud)
即使您修改了与数据库无关的内容,Play也会关闭连接池并立即重新创建它.必须有充分的理由,如果没有,还有一个解决方法.
任何帮助赞赏.