有没有人试图使用MVC而不是view-first来进行scala/lift应用程序?
我知道你可以创建控制器/视图:
package test.test.test.view
...
Lots of imports
...
class MvcRocks extends LiftView {
def dispatch = {
case "rule" => ruleDispatch _
case "bar" => barDispatch _
}
def barDispatch(): Box[NodeSeq] = {
Full(<lift:embed what="/mvc_rucks/bar" />)
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将其添加到菜单(在引导中),则可以访问此代码,即使它隐藏为:
val entries = Menu(Loc("Home", List("index"), "Home")) ::
List(Menu(Loc("MvcRock", List("mvc_rocks", "bar"), "Mvc really Rocks", Hidden)))
LiftRules.setSiteMap(SiteMap(entries:_*))
Run Code Online (Sandbox Code Playgroud)
现在,当然这将是这样,你在菜单中声明每个动作,然后为每个动作(每个控制器)有一个案例,这将打开"视图"(这将是/mvc_rucks/bar.html中的文件).
我的问题是,如果要实现完整的mvc,则需要将所有逻辑放在操作barDispatch中,但是如何将这些变量发送到HTML模板?你会如何收到发布/获取信息?
(请注意,如果您的html代码具有提升绑定,它当然将作为视图优先,即使您之前使用过MVC).
我试图存储一个会话变量,然后用它来修改Boot.scala中的菜单.以下是我将变量存储在代码段中的方法:
object sessionUserType extends SessionVar[String](null)
def list (xhtml : NodeSeq) : NodeSeq = {
Helpers.bind("sendTo", xhtml,
"provider" -> SHtml.link("/providerlogin",() => sessionUserType("provider"), Text("Provider")),
"student" -> SHtml.link("/studentlogin",() => sessionUserType("student"), Text("Student")))
}
Run Code Online (Sandbox Code Playgroud)
然后在Boot.scala中我这样做:
val studentSessionType = If(() => S.getSessionAttribute("sessionUserType").open_!.equals("student"),
"not a student session")
Run Code Online (Sandbox Code Playgroud)
我也尝试通过名称调用对象(sessionUserType),但它永远找不到它,所以我认为这可能有用,但是当我访问它时我仍然得到一个空盒子,即使实际的绑定和函数在执行之前执行菜单渲染.
任何帮助将非常感激.
谢谢
如何在Lift中创建错误处理程序?我有一些带有一些片段的html页面,如果其中一个片段引发异常我想抓住它并重定向到一些用户友好的错误页面.
如何以全能的方式做到这一点?我不想单独将错误处理放到每个代码段.我在Wicket 看起来像这样.
我正在尝试运行一个简单的Lift示例,我遇到了一个奇怪的问题.我现在用的是Sonatype的样品清单项目在这里.我略微修改了HTML,但它最初也没有工作.我遇到的问题是,当我运行本地jetty服务器并尝试访问http:// localhost:8080时,它在Firefox 3.6.10而不是HTML中显示为XML.注意,它在IE8中显示正常,但IE8中的Content-Type是"text/html".我认为Firefox出于某种原因不喜欢Content-Type"application/xhtml + xml".Firefox中的消息说:
此XML文件似乎没有与之关联的任何样式信息.文档树如下所示.
以下是Firebug的响应标头:
Expires Thu, 16 Sep 2010 03:55:04 UTC
Content-Length 558
Cache-Control no-cache; private; no-store
Content-Type application/xhtml+xml; charset=utf-8
Pragma no-cache
Date Thu, 16 Sep 2010 03:55:04 UTC
X-Lift-Version 2.0-scala280-SNAPSHOT
Server Jetty(6.1.22)
Run Code Online (Sandbox Code Playgroud)
..和实际的回应:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Lift Test</title>
</head>
<body>
<h2>Welcome to your project!</h2>
<p>
<span>Welcome to toto01 at Wed Sep 15 20:55:04 PDT 2010</span>
</p>
<script type="text/javascript" src="/ajax_request/liftAjax.js"></script>
<script type="text/javascript">
// …Run Code Online (Sandbox Code Playgroud) 所以我在过去的11个小时里试图让最简单的Scala/Lift应用程序通过Eclipse在Tomcat上运行.显然没有人试图这样做,或者这是世界上最简单的事情,所以没有人记录他们是如何做到的.使用maven原型创建代码并使用mvn tomcat运行它:运行没问题.通过Eclipse完成所有工作是另一回事.我会说这是我第一次尝试在Eclipse中使用Maven做任何事都没有帮助.我试过m2eclipse和eclipse-IAM.如果有人能够从头到尾指导我完成整个过程,或者将我指向可以的资源,那就太棒了.谢谢.
Scala 2.8带升降机2.1
如果我使用Scala 2.8和Lift 2.1(?)与eclipse 3.5.2,scala-ide和eclipse-iam,我的pom.xml文件告诉我:
错误:解析'org.scala-tools:maven-scala-plugin'版本时出错:插件需要Maven版本2.2.1
我使用这个原型定义从Maven项目创建向导创建了项目:
<archetype>
<groupId>net.liftweb</groupId>
<artifactId>lift-archetype-blank_2.8.0</artifactId>
<version>2.1-SNAPSHOT</version>
<repository>http://scala-tools.org/repo-snapshots</repository>
<description>Shawn's Custom Thinger</description>
</archetype>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这里的问题是从2.1-SNAPSHOT创建的pom.xml文件需要Maven 2.2.1,但是eclipse-iam还没有使用该版本.我还没有设法找到一种方法来使用我自己安装的Maven v2.2.1.据说eclipse-iam不允许使用外部maven安装.
其他尝试
我尝试用这个原型构建项目:
<archetype>
<groupId>net.liftweb</groupId>
<artifactId>lift-archetype-jpa-blank</artifactId>
<version>1.1-SNAPSHOT</version>
<repository>http://scala-tools.org/repo-snapshots</repository>
<description>Archetype - blank JPA project for Lift</description>
</archetype>
Run Code Online (Sandbox Code Playgroud)
但是,我从Tomcat获取运行时错误,因为我的bootstrap.liftweb.Boot类有ClassNotFound错误.但是,我可以看到maven为我创建了一个默认的Boot类.
m2eclipse的
我使用m2eclipse得到了一个没有错误的项目,但是我遇到了在Tomcat上部署它的问题.我打算重新考虑这个,因为我很好奇,如果我确实设法使一个项目工作,但在我尝试它时在URL中有一个区分大小写的问题.但是,这个过程更加手动.如果可能的话,我更喜欢eclipse-iam解决方案,但是我会在这一点上采取我所能得到的解决方案.
我正在尝试使用lift-json进行基本序列化/水合作用,但没有成功.从包装自述文件中可以看出,这应该可行.救命?
我正在使用Scala 2.8.0和Lift 2.2为sbt交叉构建2.8("net.liftweb"%%"lift-json"%"2.2").
import net.liftweb.json._
import net.liftweb.json.Serialization.{read, write}
implicit val formats = Serialization.formats(NoTypeHints)
case class Route(title: String)
val rt = new Route("x277a1")
val ser = write(rt)
// ser: String = {} ...
val deser = read[Route]("""{"title":"Some Title"}""")
// net.liftweb.json.MappingException: Parsed JSON values do not match with class constructor
Run Code Online (Sandbox Code Playgroud) 从Lift,我得到一个表格的字符串
TOKEN=EC%2d454178600K772032D&TIMESTAMP=2011%2d06%2d29T13%3a10%3a58Z&CORRELATIONID=cbd56e97cad38&ACK=Success&VERSION=64&BUILD=1936884
Run Code Online (Sandbox Code Playgroud)
来自HTTP请求的响应.
虽然它可能是非常重要的,但是我找不到将其解析为好的Lift函数Map[String, String].有帮助吗?
我有一个服务器,它将作为其职责的一部分提供一些Web内容.它使用嵌入式Jetty,我想为它添加一些Lift的美感(模板,演员等).
问题是所有电梯示例都使用Jetty作为容器.有没有办法在我的嵌入式Jetty中启动Lift?如果是,怎么样?
今天,当我在互联网上搜索时,我在Lift框架的Web开发中看到了View第一种方法.有人能告诉我第一视图和MVC方法之间的区别吗?非常感谢你
我需要编写一个基于Web的小型UI,它可以运行raspi,因为我试图将一些Scala拉入我的日常工作中,我想使用其中一个Play,Scalatra或者Lift.有没有人有使用这些框架开发Raspberry Pi的经验?如果是这样,哪一个在性能方面更合适?