我想在我的User模型中添加一个属性,该属性返回Project表中具有用户ID的行数.
所以像这样......
def numProjects = {
/* somehow get count from Project table
The straight sql would be:
SELECT COUNT(*) FROM projects WHERE userId = <the current user>
*/
}
Run Code Online (Sandbox Code Playgroud) 如何制作独立电梯应用?使用哪些工具/库?在某些应用程序服务器中,将提升应用程序用作战争的性能如何?
我正在尝试在Google App Engine上使用Lift 2.1-SNAPSHOT,但HTML中的电梯片段尚未处理.它只返回HTML文件.
这是lift.html文件(只是一个简单的测试):
<lift:surround with="default" at="content">
Welcome to your Lift application
</lift:surround>
Run Code Online (Sandbox Code Playgroud)
web.xml有:
<filter>
<filter-name>LiftFilter</filter-name>
<display-name>Lift Filter</display-name>
<description>The Filter that intercepts lift calls</description>
<filter-class>net.liftweb.http.LiftFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LiftFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
appengine-web.xml包含:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>kivanotify</application>
<version>6</version>
<static-files/>
<resource-files/>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
<property name="in.gae.j" value="true" />
</system-properties>
<sessions-enabled>true</sessions-enabled>
<static-files>
<exclude path="/static/**" />
</static-files>
</appengine-web-app>
Run Code Online (Sandbox Code Playgroud)
使用"/opt/appengine-java-sdk-1.3.6/bin/dev_appserver.sh target/kivanotify"运行项目并访问url http:// localhost:8080/lift.html很简单时返回lift.html因为没有处理标签.
知道为什么标签没有被处理?没有记录提示问题的日志记录.
此致,Gero
我在Boot.scala中有一个像这样定义的站点地图
def sitemap() = SiteMap(
Menu(S ? "Home") / "index",
Menu(S ? "Login") / "login",
Menu(S ? "Do Logged in Stuff") / "loggedinstuff" >> If( () => loggedInUser.is != Empty, "You must be logged in") )
Run Code Online (Sandbox Code Playgroud)
此外,我在Boot.scala中定义了一个loggedInUser
object loggedInUser extends SessionVar[Box[String]](Empty)
Run Code Online (Sandbox Code Playgroud)
当我有用户登录时,我希望他们将我的loggedInUser更改为他们成功登录的用户名.
我正在使用这个LiftScreen特性,我对字段和文本方法有疑问.文本方法使用该makeField方法然后SHtml.text渲染字段,而field方法使用FormVendor特征来渲染html.
那么添加字段的最佳方法是哪种?我不得不使用字段方法或text/password/etc方法?
谢谢.
与java中心应用程序一样,Play框架是无状态的,并且提升框架是有状态的,就像任何servlet或Java EE容器一样,如Tomcat或GlassFish是statefull,是PHP web框架,如zend或cake php无状态或有状态,为什么?
假设我想在Json中序列化以下结构:
case class A(name:String)
case class B(age:Int)
case class C(id:String, a:A,b:B)
Run Code Online (Sandbox Code Playgroud)
我正在使用lift-json"write(...)",但我希望将结构展平,而不是:
{ id:xx , a:{ name:"xxxx" }, b:{ age:xxxx } }
Run Code Online (Sandbox Code Playgroud)
我想得到:
{ id:xx , name:"xxxx" , age:xxxx }
Run Code Online (Sandbox Code Playgroud) 我想知道类片段和电梯中的对象片段之间的确切区别.
如果我有
class Foo {
var a: String
def render(n:NodeSeq) = {
<h3> you chose {a} </h3>
}
}
Run Code Online (Sandbox Code Playgroud)
和
object Bar {
var b: String
def render(n:NodeSeq) = {
<h3> you chose {b} </h3>
}
}
Run Code Online (Sandbox Code Playgroud)
它们之间的具体区别是什么,做什么a和b有不同的行为.在简单地抬起它是说,
在这种情况下,代码段是一个对象单例,因为它不接受任何构造函数参数并且没有实例变量.
那对每个用户来说意味着Bar什么呢?
我知道这是一个noob问题,但是我需要非常清楚这一点,我不能很好地匹配片段中对象和类之间的区别.
我正在遇到一种情况,我从外部服务器检索一些Json(我对该服务器没有任何控制权).Json有一个元素可能会出现一次或多次.我正在尝试使用net.liftweb.json工具解析它,只有在元素出现多次时才能正常工作.如果元素只出现一次,则无法解析.
这是一些示例代码:
import net.liftweb.json._
import net.liftweb.json.JsonDSL._
case class JSonListIssue(foo: List[String])
class JSonTest extends TestCase {
implicit val formats = net.liftweb.json.DefaultFormats;
def testJsonList {
val jsonStr2Foos = "{\"foo\": \"bar\", \"foo\": \"bar2\"}"
val json = (parse(jsonStr2Foos).extract[JSonListIssue])
assertEquals(2, json.foo.size)
val jsonStr1Foo = "{\"foo\": \"bar\"}"
val json2 = (parse(jsonStr1Foo).extract[JSonListIssue]) // Results in Json MappingException
assertEquals(1, json2.foo.size)
}
}
Run Code Online (Sandbox Code Playgroud)
第二个解析语句在上面的代码中失败.如果我将如下定义case类,第二个解析将起作用,但第一个解析将失败.
case class JSonListIssue(foo: String)
Run Code Online (Sandbox Code Playgroud)
关于如何以干净的方式解决这个问题的任何建议?我当然可以捕获MappingException,然后使用其他case类解析它,但那脏...
谢谢,Gero
我正在努力通过Gilberto T. Garcia Jr的Lift应用程序开发手册,并遇到了一个我似乎无法解决的问题.我已经复制了源代码Chap06-map-table,我正在尝试修改它以使用我的IBM i(iSeries,AS/400,i5)数据库.我能够使用Squeryl Record使其与第一种类型的连接一起工作.但是,我似乎无法想象如何使用JNDI数据源使其工作.我花了几天的时间在互联网上搜索设置它的例子,并没有找到一个涉及DB/400数据库连接的好例子.下面是我尝试启动容器时遇到的错误以及我为了使其工作而修改的代码.任何帮助,将不胜感激.jt4oo.jar(jtOpen)的数据源类似乎有一些选择,我不确定哪个是最好用的,也可能是另一个.我一直在尝试这三个中的每一个,我假设第一个是正确的.
com.ibm.as400.access.AS400JDBCManagedConnectionPoolDataSource
com.ibm.as400.access.AS400JDBCConnectionPoolDataSource
com.ibm.as400.access.AS400JDBCDataSource
Run Code Online (Sandbox Code Playgroud)
谢谢.短发
这是错误的开始:
> container:start
[info] jetty-8.0.4.v20111024
[info] No Transaction manager found - if your webapp requires one, please config
ure one.
[info] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
[info] started o.e.j.w.WebAppContext{/,[file:/C:/Users/Bob/Lift26Projects/scala_
210/chap06-map-table/src/main/webapp/]}
[info] started o.e.j.w.WebAppContext{/,[file:/C:/Users/Bob/Lift26Projects/scala_
210/chap06-map-table/src/main/webapp/]}
18:21:47.062 [pool-7-thread-1] ERROR n.liftweb.http.provider.HTTPProvider - Fail
ed to Boot! Your application may not run properly
java.sql.SQLException: The application requester cannot establish the connection
. ("jdbc:as400://www.busapp.com;libraries=PLAY2TEST";naming=system;errors=full;)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:524) ~[jt
400-6.7.jar:JTOpen 6.7]
at com.ibm.as400.access.AS400JDBCConnection.setProperties(AS400JDBCConne …Run Code Online (Sandbox Code Playgroud)