我刚刚开始使用lift,我现在正在尝试将普通表单更改为ajax表单,但该方法processEntryAdd永远不会被调用.
def addUser(xhtml : Group) : NodeSeq = {
var firstName = ""
var lastName = ""
def processEntryAdd() {
Log.info("processEntryAdd: " + firstName + ", " + lastName)
}
SHtml.ajaxForm(
bind("entry", xhtml,
"firstName" -> SHtml.text(firstName,
(x) => {
Log.info("Setting firstName to " + x);
firstName = x
}),
"lastName" -> SHtml.text(lastName,
(x) => {
Log.info("Setting lastName to " + x);
lastName = x
}),
"submit" -> SHtml.submit("Add user", processEntryAdd),
))
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现我想要做的,或为什么上面的代码不起作用.按下按钮时会提交两个表单字段的值,firstName并且lastName设置了两个局部变量,但未调用与SHtml.submit关联的函数.
谢谢!
什么是使用Scala 2.8的Lift的状态?
我正在网上找到关于它的谈话片段.我一直在尝试调整pom.xml,但是我从Lift方面遇到了错误.
我花了最后一天搜索和阅读各种网站和文章,试图找到自己的问题的答案,我没有发现任何有用的东西.我甚至不确定这是否可行.我的问题是我试图使用lift-json解析并提取Json响应.响应由4部分组成,其中前3个部分对于我所做的每种类型的请求的每个响应总是相同的.最后一部分取决于请求的类型,但它总是一个类型的列表.我希望做这样的事情:
abstract class MyObjects
case class Apple(id: Int, name: String, color: String) extends MyObjects
case class Orange(id: Long, name: String, state: String) extends MyObjects
abstract class MyResponse
case class Fruits[T <: MyObjects](aisle: Int, bin: Int, hasWhat: Option[List[T]])
Run Code Online (Sandbox Code Playgroud)
如果我想知道所有的苹果是什么,我会提出要求,并回复一个苹果列表的回复.当我尝试提取此示例时:
myJson.extract[Fruits[Apple]]
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
net.liftweb.json.MappingException: do not know how to get type parameter from T
at net.liftweb.json.Meta$.fail(Meta.scala:128)
at net.liftweb.json.Meta$Reflection$.term$1(Meta.scala:206)
at net.liftweb.json.Meta$Reflection$.typeParameters(Meta.scala:220)
at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:91)
at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:101)
at net.liftweb.json.Meta$.mkContainer$1(Meta.scala:90)
at net.liftweb.json.Meta$.fieldMapping$1(Meta.scala:107)
at net.liftweb.json.Meta$.toArg$1(Meta.scala:117)
at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:83)
at net.liftweb.json.Meta$$anonfun$constructors$1$1$$anonfun$apply$1.apply(Meta.scala:82)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:...
Run Code Online (Sandbox Code Playgroud)
我正在使用lift-json 2.1和scala 2.8.我确实有办法解决它,通过专门为每种类型的响应创建一个案例类,但我认为我想要做的更干净.只是想知道a)这是否可能?b)如果是这样,我做错了什么?
编辑...示例应用程序:
val apples = …Run Code Online (Sandbox Code Playgroud) 在Lift中,整个ProtoUser构造非常棒,令人惊叹的是它为你做了什么,大部分优点(很遗憾,很多东西都没有)没有记录.
只有一个问题:它包含我不需要的数据,甚至包含我不想要的数据.例如,我希望我的用户通过昵称登录,而我不需要知道他的位置,区域设置或名/姓.但在注册时,我需要标准注册页面上未显示的信息.
我的第一个想法是重写我自己的用户特征,但后来我必须重新编写所有的会话代码,授权等.是否已有替代方案?或者是否可以改变ProtoUser我自己的注册和登录页面,以及只有我需要的数据?
谢谢收听.
MongoDB架构迁移/升级有哪些选项?
我们(我的同事和我)有一个相当大(约1亿条记录)的MongoDB集合.此集合被映射(ORM'd)到已经过许多不同迭代的Scala lift-mongodb对象.我们在那里有各种代码来处理丢失的字段,重命名,删除,迁移等.
尽管整个"无模式"的东西可以很好和灵活,但在这种情况下,随着我们的对象不断发展,它会导致大量代码混乱.继续沿着这条"灵活对象"的道路前进是根本不可持续的.
你们是如何使用Scala在MongoDB中实现模式迁移/升级的?这个框架是否存在?我知道Foursquare使用Scala和MongoDB以及Rogue(他们自己的查询DSL)...有谁知道他们如何处理他们的迁移?
谢谢.
我正在学习在Scala中进行Web开发.目前正试图在MAC OSX中使用sbt 0.11安装最新版本的Scala/lift.到目前为止,我已经完成了以下工作:
1.安装了Scala 2.9.1 final
2.从https://github.com/harrah/xsbt/wiki/Setup下载最新的sbt 0.11
3.为sbt设置路径环境
我现在要做的是从http://liftweb.net/download获取最新的电梯框架(2.4-M4),以便我可以尝试使用jetty在localhost:8080上运行lift_basic项目.我有几个问题;
因为在0.11上我将不得不这样做:
resolvers += "Web plugin repo" at "http://siasia.github.com/maven2"
addSbtPlugin("com.github.siasia" %% "xsbt-web-plugin" % "0.1.2")
而不是做libraryDependencies += ...我应该把我的对象解析器(检查下面的代码)放在哪里,这将使我能够安装jetty和web插件?所以,在lift_basic文件夹下,它们应该在Project/build/LiftProject.Scala中,还是只删除LiftProject.scala并在Project/Build.scala下创建Build.scala?
object Resolvers {
val webPluginRepo = "Web plugin repo" at "http://siasia.github.com/maven2"
val jettyRepo = "Jetty Repo" at "http://repo1.maven.org/maven2/org/mortbay/jetty"
}
object Dependencies {
// web plugin
val webPluginDeps = Seq(
"org.mortbay.jetty" % "jetty" % "6.1.26" % "jetty", // The last part is "jetty" not "test".
"javax.servlet" % "servlet-api" % …Run Code Online (Sandbox Code Playgroud)首先,如果有什么更好的事情进入你的脑海,我想请求更正我的问题标题.
让我们一提起REST Web服务例如,从简单地抬起书由大卫·波拉克在这里.
如果我在目录中打开Windows(Windows XP SP3,所有更新,Oracle JDK 7)控制台并运行"sbt"(sbt.bat),一切正常.但是如果我尝试在Linux中使用相同的(但使用"./sbt")(XUbuntu 11.10,OpenJDK 6,OpenJDK 7,Oracle JDK 7(尝试了所有这些)),SBT返回(而不是转到SBT控制台)模式)立即完成它的工作.这意味着命令可能只是./sbt它立即返回(在完成自动项目维护之后),或者是它./sbt jetty-run- 它只是启动Web服务器并立即关闭它.
此外,我为我的项目开发的Web服务编译并在Windows上正常工作,但无法./sbt compile在Linux上编译(使用)(通过相同版本的SBT).错误是"源文件'/.../src/main/scala/code/lib/FooBar.scala;src/main/scala/bootstrap/liftweb/Boot.scala'找不到",其中"FooBar. scala"是我执行所有服务的对象(直接从Boot.scala调用).
任何想法可能是什么原因以及如何解决它?
更新:第一个问题(SBT返回shell而不是提供SBT控制台)的原因似乎是在Windows上检出文件并且有CR + LF而不是仅仅LF行结束.找不到源文件的解决方案只是使用clean命令从头开始重新编译.
我有一个Lift应用程序打包为WAR存档,必须在Jetty下部署.但是,我希望能够自动执行一些任务:
我正在使用SBT,我不知道这将与Puppet或类似的东西有多好.你会怎么做?
我有一个我的电梯项目依赖的外部java项目.通过在我的sbt中添加以下行,我已经能够将依赖项添加到该项目中的类:
unmanagedClasspath in Compile += file("[Path to My Project]/classes")
Run Code Online (Sandbox Code Playgroud)
但是这个项目还有一个lib文件夹,它带有一组引用的jar文件,我无法弄清楚添加这些依赖项的正确语法是什么.尝试过以下但不起作用:
unmanagedJars in Compile += file("[Path to My Project]/lib/*.jar")
Run Code Online (Sandbox Code Playgroud)
任何指针都非常感激
问候
梅