我是Play!的新手,我正在尝试将现有网站从cakePHP迁移到Play!.
我面临的问题是表单验证.
我定义了一个案例类User,代表我网站的用户:
case class User(
val id: Long,
val username: String,
val password: String,
val email: String
val created: Date)
Run Code Online (Sandbox Code Playgroud)
(还有一些字段,但这些字段足以解释我的问题)
我希望我的用户能够使用表单在我的网站上创建一个帐户,我希望这个表单能够通过Play!进行验证.
所以,我创建了以下操作:
def register = Action {
implicit request =>
val userForm = Form(
mapping(
"id" -> longNumber,
"username" -> nonEmptyText(8),
"password" -> nonEmptyText(5),
"email" -> email,
"created" -> date)(User.apply)(User.unapply))
val processedForm = userForm.bindFromRequest
processedForm.fold(hasErrors => BadRequest("Invalid submission"), success => {
Ok("Account registered.")
})
}
Run Code Online (Sandbox Code Playgroud)
显然,我不希望用户在表单中自己填写id或创建日期.所以我的问题是:我该怎么办?
我应该定义一个新的"转换模型",其中只包含实际提供给表单中用户的字段,并在将此中间模型插入到我的数据库之前将其转换为完整的模型吗?
也就是说,用这样的东西代替我的行动:
def register = Action {
implicit request =>
case …Run Code Online (Sandbox Code Playgroud) 对于我的第一个Scala程序,我正在尝试编写一个小工具,它将XML文件从一个模式转换为另一个模式.
我开始编写一个方法,它将为我提供文件内容:
def loadFile(filename: String, encoding: String = "utf-8"):Option[String] = {
try
{
val source = scala.io.Source.fromFile(filename, encoding)
val contents = source.mkString
source.close()
return Some(contents)
}
catch
{
return None
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译.我回来了"值apply不是Nothing的成员"和"值isDefinedAt不是Nothing的成员"作为行的错误消息return None.
我可以找到返回选项使用匹配的所有示例,但这在这里没有意义.如果由于某种原因我无法读取文件,我只想不失败.
在这种情况下我该怎么办?在Scala中有这种做事的模式吗?
我编写了以下代码来检查字符串是否包含特殊字符.代码看起来太复杂了,但我不知道如何使它更简单.有任何想法吗?
def containsNoSpecialChars(string: String): Boolean = {
val pattern = "^[a-zA-Z0-9]*$".r
return pattern.findAllIn(string).mkString.length == string.length
} //> containsNoSpecialChars: (string: String)Boolean
containsNoSpecialChars("bl!a ") //> res0: Boolean = false
containsNoSpecialChars("bla9") //> res1: Boolean = true
Run Code Online (Sandbox Code Playgroud) 我试图让play框架在IntelliJ中正常工作,但似乎我的Scala模板没有被正确检测到.这些是我所做的步骤:
建立:
从终端我运行它(按以下顺序):
在IntelliJ中,我打开项目并检查文件
target/scala-2.10/src_managed/main/controllers/routes,它看起来像这样:

我也尝试按照这些说明逐步设置一个全新的安装:
完成所有步骤后,IntelliJ仍然无法解析Scala模板.这是一个完全新鲜的游戏应用程序:

我可以编译,从IDE运行测试并观察我在浏览器中所做的更改.唯一不起作用的是IntelliJ中的代码帮助.我不知道如何继续这一点,非常感谢任何帮助!
我正在研究的项目需要从SQS读取消息,我决定使用Akka来分发这些消息的处理.
由于SQS是Camel支持的,并且内置了在Consumer类中使用Akka的功能,我想最好以这种方式实现端点和读取消息,尽管我没有看到很多人这样做的例子.
我的问题是我不能足够快地轮询我的队列以保持我的队列空,或接近空.我最初的想法是,我可以让消费者从SQS以X/s的速率接收来自Camel的消息.从那里,我可以简单地创建更多的消费者,以达到我需要处理消息的速度.
我的消费者:
import akka.camel.{CamelMessage, Consumer}
import akka.actor.{ActorRef, ActorPath}
class MyConsumer() extends Consumer {
def endpointUri = "aws-sqs://my_queue?delay=1&maxMessagesPerPoll=10&accessKey=myKey&secretKey=RAW(mySecret)"
var count = 0
def receive = {
case msg: CamelMessage => {
count += 1
}
case _ => {
println("Got something else")
}
}
override def postStop(){
println("Count for actor: " + count)
}
}
Run Code Online (Sandbox Code Playgroud)
如图所示,我设置delay=1以及&maxMessagesPerPoll=10提高消息速率,但我无法使用相同的端点生成多个消费者.
我在文档中读到了这一点By default endpoints are assumed not to support multiple consumers.,我相信这也适用于SQS端点,因为产生多个消费者只会给我一个消费者,在运行系统一分钟后,输出消息Count for actor: x而不是输出的其他消息Count for …
我理解这些方法可能被认为是"等同的"或"同义词",尽管不是"相同的",根据诸如调用collection.size或collection.length和Scala Buffer 的最佳Scala约定之类的问题:大小或长度?.
但这是否意味着他们是一样的?
不要向我提供相同的意见或虚假的概念.告诉我他们什么时候不一样.
用坚硬的科学来支持你的主张!
字节代码就足够了.我对JIT特定的优化并不那么感兴趣.
我对世界目前的状况特别感兴趣,即最近的里程碑中的Scala 2.11.
我试图实现Martin Odersky的CourseRa Scala课程中显示的示例,尝试使用适当的括号显示持有Sums/Prods的表达式.我提出了以下解决方案:
package expressions
trait Expr {
def eval : Int = {
this match {
case Number(n) => n
case Sum(e1,e2) => e1.eval + e2.eval
}
}
//def show( exp : Expr) : String
}
case class Number(n:Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
case class Prod(e1 : Expr, e2 : Expr) extends Expr
case class Var(x:Char) extends Expr
object testExpr {
def show(exp : Expr) : String = {
exp match {
case …Run Code Online (Sandbox Code Playgroud) 我写的功能:
1)发送HTTP GET请求(响应是有效的JSON)
2)解析对json对象的响应
代码段:
val page = url("http://graph.facebook.com/9098498615")
val response = Http(page OK dispatch.as.String)
Await.result(response , 10 seconds)
val myJson= JSON.parseFull(response .toString)
//this isnt helping -> val myJson= JSON.parseRaw(response .toString)
Run Code Online (Sandbox Code Playgroud)
问题是在此之后,myJson为None,而我期望它保留响应中的json数据.
救命 ?
我正在尝试使用Akka的TestKit进行specs2测试.我坚持一个持续的编译错误我无法弄清楚如何解决,我很感激建议.
编译错误是:
TaskSpec.scala:40: parents of traits may not have parameters
[error] with akka.testkit.TestKit( ActorSystem( "testsystem", ConfigFactory.parseString( TaskSpec.config ) ) )
Run Code Online (Sandbox Code Playgroud)
根据Akka docs和internet xebia以及Akka in Action的建议,我试图将TestKit合并到specs2 Scope中.这是我得到错误的代码片段:
class TaskSpec
extends Specification
with AsyncTest
with NoTimeConversions {
sequential
trait scope
extends Scope
with TestKit( ActorSystem( "testsystem", ConfigFactory.parseString( TaskSpec.config ) ) )
with AkkaTestSupport {
...
Run Code Online (Sandbox Code Playgroud)
我有以下帮手:
trait AkkaTestSupport extends After { outer: TestKit =>
override protected def after: Unit = {
system.shutdown()
super.after
}
}
Run Code Online (Sandbox Code Playgroud) 使用play,我的控制器调用Foo服务,一个对象.此对象仅使用val's' immutable data structures,将由多个客户端调用.
当我的Controller调用Foo.doQuery()多个线程时,会发生什么?
如果客户端1拨打电话,Foo.doQuery()客户2的呼叫是否Foo.doQuery()必须等待?
我很好奇我是否应该简单地为每个实例创建一个新类Foo,但是我想知道val在多线程环境中使用Scala单例时会发生什么.
scala ×10
akka ×2
amazon-sqs ×1
apache-camel ×1
databinder ×1
forms ×1
java ×1
json ×1
nullable ×1
parsing ×1
regex ×1
sbt ×1
singleton ×1
specs2 ×1
validation ×1