我在Java方面的背景几乎不存在,而且我已经在Scala上阅读并在REPL上玩了几周(我确实有PHP经验)。我刚刚开始尝试使用Scala和Lift框架创建一个简单的Web服务器。
我设法让它运行(使用Windows 7 x64,Java版本:1.8.0_60)。
关注this和this示例,以下是我从头开始运行服务器所做的工作:
已安装Java 1.8.0_60
使用.msi安装程序安装SBT
创建build.sbt
organization := "org.test"
name := "testproj1"
version := "0.1-alpha"
scalaVersion := "2.11.7"
libraryDependencies ++= {
val liftVersion = "2.6"
Seq(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile",
"net.liftmodules" %% "lift-jquery-module_2.6" % "2.9",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container,test",
)
}
enablePlugins(JettyPlugin)
创建project/plugins.sbt
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.0.4")
创建project/build.properties
sbt.version=0.13.8
创建src/main/scala/bootstrap/Boot.scala
package bootstrap.liftweb
import net.liftweb._
import net.liftmodules.JQueryModule
import util._
import Helpers._
import common._
import http._
import sitemap._
import Loc._
import code.snippet._
class Boot {
def boot {
LiftRules.addToPackages("code")
val entries = List(
Menu.i("Home") / "index",
Menu.i("DynamicTest") / "helloworld",
Menu.i("Static") / "static" / **
)
LiftRules.setSiteMap(SiteMap(entries:_*))
LiftRules.early.append(_.setCharacterEncoding("UTF-8"))
LiftRules.htmlProperties.default.set(
(r: Req) => new Html5Properties(r.userAgent)
)
JQueryModule.InitParam.JQuery = JQueryModule.JQuery21Z
JQueryModule.init()
}
}
创建src/main/webapp/WEB-INF/web.xml
:
<web-app>
<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>
</web-app>
然后在cmd
,我运行sbt
,更新,然后使用jetty:start
启动服务器。
一切似乎都很好。我可以做简单的静态页面和站点映射。但是,当我尝试使用Ajax时,我收到了一个JS错误:
未捕获的ReferenceError:未定义liftajax
我尝试做的只是使用ajaxcall()
进行简单的内容替换。这就是我对helloworld.html的所作所为:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<title>Dynamic</title>
</head>
<body class="lift:content_id=main">
<p>Bello!</p>
<div id="main" class="lift:surround?with=default;at=content">
<script id="jquery" src="/classpath/jquery.js" type="text/javascript"></script>
This page has dynamic content.
<div data-lift="HelloWorld">
<input id="name-input" placeholder="put your name here">
<input type="submit" value="Submit Name">
Hello, my dear <span id="name"></span> :)
</div>
</div>
<p>Bubbai</p>
</body>
</html>
这是src/main/scala/code/HelloWorld.scala
package code.snippet
import net.liftweb._
import util.Helpers._
import http.js._; import JE._; import JsCmds._
import http.SHtml._
class HelloWorld {
def render = ":submit [onclick]" #> ajaxCall(
ValById("name-input"),
n => SetValById("name", n)
)
}
(我注意到如果我将脚本标记放在html文件的<head>
中,它就不会被包含在内)。我从浏览器中得到的是:
<!DOCTYPE html>
<div id="main">
<script type="text/javascript" src="/classpath/jquery.js" id="jquery"></script>
This page has dynamic content.
<div>
<input placeholder="put your name here" id="name-input">
<input onclick="liftAjax.lift_ajaxHandler('F461833963092XQOEYM=' + encodeURIComponent((function() {if (document.getElementById("name-input")) {return document.getElementById("name-input").value;} else {return null;}})()), null, null, null)"
value="Submit Name" type="submit">Hello, <span id="name"></span> :)
</div>
</div>
我见过this question。那里的答案告诉我要启动并运行JQuery模块,我做了。加载了jQuery文件。但当然liftajax
中的onclick
未在任何地方定义。
所以主要的问题是,liftajax
应该从哪里来,以及我为了让它运行而缺少什么?感谢。