标签: scala

如何使用Play正确验证表单!在斯卡拉?

我是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)

forms validation scala playframework playframework-2.0

6
推荐指数
1
解决办法
3102
查看次数

如何在Scala中返回None

对于我的第一个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中有这种做事的模式吗?

design-patterns scala nullable

6
推荐指数
2
解决办法
6077
查看次数

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)

regex scala

6
推荐指数
3
解决办法
1万
查看次数

IntelliJ IDE无法正确检测Scala模板

我试图让play框架在IntelliJ中正常工作,但似乎我的Scala模板没有被正确检测到.这些是我所做的步骤:

建立:

  1. Brew安装游戏
  2. Brew安装sbt
  3. 下载并安装IntelliJ的play Framework插件
  4. 下载并安装IntelliJ的Scala插件
  5. 下载并安装IntelliJ的SBT插件

从终端我运行它(按以下顺序):

  1. 玩新的doTest
  2. 玩干净编译
  3. 发挥想法
  4. SBT
  5. GEN-想法

在IntelliJ中,我打开项目并检查文件 target/scala-2.10/src_managed/main/controllers/routes,它看起来像这样: http://i.imgur.com/EN4iqux.png

我也尝试按照这些说明逐步设置一个全新的安装:

如何使用intellij与play框架

完成所有步骤后,IntelliJ仍然无法解析Scala模板.这是一个完全新鲜的游戏应用程序: http://i.imgur.com/IPrUpVL.png

我可以编译,从IDE运行测试并观察我在浏览器中所做的更改.唯一不起作用的是IntelliJ中的代码帮助.我不知道如何继续这一点,非常感谢任何帮助!

java scala intellij-idea sbt playframework

6
推荐指数
1
解决办法
2818
查看次数

使用Akka,SQS和Camel的消费者民意调查率

我正在研究的项目需要从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 …

scala apache-camel amazon-sqs akka

6
推荐指数
1
解决办法
1743
查看次数

Scala集合中的大小和长度是否生成相同的字节代码?

我理解这些方法可能被认为是"等同的"或"同义词",尽管不是"相同的",根据诸如调用collection.size或collection.lengthScala Buffer 的最佳Scala约定之类的问题:大小或长度?.

但这是否意味着他们是一样的?

不要向我提供相同的意见或虚假的概念.告诉我他们什么时候不一样.

用坚硬的科学来支持你的主张!

字节代码就足够了.我对JIT特定的优化并不那么感兴趣.

我对世界目前的状况特别感兴趣,即最近的里程碑中的Scala 2.11.

scala

6
推荐指数
1
解决办法
1938
查看次数

使用案例类来显示表达式

我试图实现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)

functional-programming scala pattern-matching

6
推荐指数
2
解决办法
1475
查看次数

Scala调度GET请求,无法解析对json的响应

我写的功能:

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)

问题是在此之后,myJsonNone,而我期望它保留响应中的json数据.

救命 ?

parsing json scala databinder scala-dispatch

6
推荐指数
2
解决办法
6296
查看次数

使用Akka TestKit和Specs2

我正在尝试使用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)

scala akka specs2

6
推荐指数
1
解决办法
2218
查看次数

具有多线程的Scala Singleton对象

使用play,我的控制器调用Foo服务,一个对象.此对象仅使用val's' immutable data structures,将由多个客户端调用.

当我的Controller调用Foo.doQuery()多个线程时,会发生什么?

如果客户端1拨打电话,Foo.doQuery()客户2的呼叫是否Foo.doQuery()必须等待?

我很好奇我是否应该简单地为每个实例创建一个新类Foo,但是我想知道val在多线程环境中使用Scala单例时会发生什么.

singleton multithreading scala playframework

6
推荐指数
1
解决办法
4425
查看次数