我正在通过Scala playframework教程,我遇到了这段令我困惑的代码片段:
def newTask = Action { implicit request =>
taskForm.bindFromRequest.fold(
errors => BadRequest(views.html.index(Task.all(), errors)),
label => {
Task.create(label)
Redirect(routes.Application.tasks())
}
)
}
Run Code Online (Sandbox Code Playgroud)
所以我决定调查并发现这篇文章.
我还是不明白.
这有什么区别:
implicit def double2Int(d : Double) : Int = d.toInt
Run Code Online (Sandbox Code Playgroud)
和
def double2IntNonImplicit(d : Double) : Int = d.toInt
Run Code Online (Sandbox Code Playgroud)
除了明显的事实,他们有不同的方法名称.
我implicit
什么时候应该使用?为什么?
在播放控制台上发出"run"命令时,如何更改播放框架中播放框架使用的默认端口.
这适用于playframework 2.0 beta.
在命令行或application.conf中使用http.port配置参数似乎没有任何效果:
C:\dev\prototype\activiti-preso>play run --http.port=8080
[info] Loading project definition from C:\dev\prototype\activiti-preso\project
[info] Set current project to activiti-preso (in build file:/C:/dev/prototype/activiti-preso/)
Windows, really? Ok, disabling colors.
--- (Running the application from SBT, auto-reloading is enabled) ---
[error] org.jboss.netty.channel.ChannelException: Failed to bind to: 0.0.0.0/0.0.0.0:9000
[error] Use 'last' for the full log.
Run Code Online (Sandbox Code Playgroud) 使用AngularJS和Scala Play,我收到了这个错误.
错误:参数'MainCtrl'不是函数,未定义
我正在尝试创建一个包含一周中几天的表格.
请看一下我的代码.我检查了控制器的名称,但这似乎是正确的.注意:此SO 答案中使用的代码
index.scala.html
@(message: String)
@main("inTime") {
<!doctype html>
<html lang="en" ng-app>
<head>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
</head>
<div ng-controller="MainCtrl">
<table border="1">
<tbody ng-repeat='(what,items) in data'>
<tr ng-repeat='item in items'>
<td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
<td>{{item}}</td>
</tr>
</tbody>
</table>
</div>
</html>
}
Run Code Online (Sandbox Code Playgroud)
MainCtrl.js
(function() {
angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
$scope.data = {
Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
});
}());
Run Code Online (Sandbox Code Playgroud) 我们正在计划一个主要为移动应用提供内容的项目,但需要有一个网站.
我的问题是使用Jersey或Restlet为我们的移动应用程序开发REST API是否有意义,然后使用Play!为网站服务.
或者只是使用Play更有意义!做到这一切?如果是这样,如何使用Play进行REST!框架?
我是Play框架的新手.我正在尝试将MySQL数据库配置为与Play Ebeans一起使用的数据源.
请问您能解释一下使用Play 2.0框架配置MySQL所需的步骤(例如,下载驱动程序,添加依赖项等).
java空间中似乎有一种趋势,即不再以war文件(或ear文件)的形式将java Web应用程序部署到java servlet容器(或应用程序服务器),而是将应用程序打包为可执行jar.像jetty这样的嵌入式servlet/HTTP服务器.我的意思是,更新的框架影响新应用程序的开发和部署方式,而不是如何将应用程序交付给最终用户(因为,例如,我知道Jenkins使用嵌入式容器,非常容易抓住和去).采用可执行jar选项的框架示例: Dropwizard,Spring Boot和Play (它不是在servlet容器上运行,而是嵌入了HTTP服务器).
我的问题是,来自我们已经将我们(直到这一点,主要是Struts2)应用程序部署到单个tomcat应用程序服务器的环境,如果我们计划使用嵌入式容器方法,需要做出哪些更改,最佳实践或注意事项?目前,我们在单个tomcat服务器上运行大约10个自行开发的应用程序,对于这些小型应用程序,共享资源并在一台服务器上进行管理的能力很不错.我们的应用程序无意分发给最终用户以在其环境中运行.但是,如果我们决定利用更新的Java框架,那么这种方法会改变吗?越来越多地使用云部署(例如Heroku)刺激了对可执行jar的转变?
如果您有使用Play风格的部署管理多个应用程序而不是单个应用程序服务器上的传统war文件部署的经验,请分享您的见解.
哇,玩!框架有很多静态方法.在我上学的地方,我们被告知永远不会使用任何静力学,但玩!使用它就像没有明天一样.那是不是很好?如果是这样,为什么?
我们(7个人和我)正计划使用Play!涉及Web应用程序的项目框架.我们决定玩Play!因为它看起来很有趣,我们所有人都已经知道Java并且任务很难,所以我们想要专注于实际的任务,而不是学习如何用不同的语言编程.
我们总是说,但是,永远不要用"静在我们开发的任何Java程序,但是当我看着玩!......好吧......大约一半的方法都是静态的.</夸张>
我想,至少,我们可以使用单例对象(通过使用Scala,例如^^)来编程我们的项目,但我非常担心框架本身实际上有多少静态.
那么,我应该关注这个吗?玩的方式!开发人员编程使它成为所有这些静态不会造成问题的?
(例如,这个主题有一个关于为什么要不惜一切代价避免静态成员的咆哮.)
是否有可能通过WebJars使用我的应用程序中包含的Play 2.3应用程序concat/optimize JS(使用sbt-rjs)?
举一个具体的例子:我正在尝试创建一个core.js模块,其中包含在单个文件中连接和缩小的所有第三方库,然后可以将其指定为其他AMD模块的依赖项.
通过WebJars包含这些库而不是"手动"下载源会很棒.
这是我的build.sbt文件中的一个片段,我在其中指定了我的webjar依赖项:
// Webjars
libraryDependencies ++= Seq(
"org.webjars" % "requirejs" % "2.1.15",
"org.webjars" % "underscorejs" % "1.7.0",
"org.webjars" % "jquery" % "1.11.1",
"org.webjars" % "bootstrap" % "3.3.1" exclude("org.webjars", "jquery"),
"org.webjars" % "angularjs" % "1.3.4-1" exclude("org.webjars", "jquery")
)
Run Code Online (Sandbox Code Playgroud)
这是我的requireJS构建配置
requirejs.config({
baseUrl: '/assets/javascripts',
shim: {
'jsRoutes': {
deps: [],
exports: 'jsRoutes'
},
'angular': {
deps: ['jquery'],
exports: 'angular'
},
'underscore': {
exports: '_'
},
'angularRoute': ['angular'],
'angularCookies': ['angular'],
'bootstrap': ['jquery']
},
paths: {
'requirejs': …
Run Code Online (Sandbox Code Playgroud) 假设我在Scala中已经运行了一个基于Play 2.0框架的应用程序,它可以提供以下URL:
它以所有已知生日的列表作出回应
我现在想通过添加使用可选的"from"(日期)和"to"请求参数限制结果的功能来增强此功能,例如
HTTP://本地主机:9000 /生日从= 20120131&到= 20120229?
(此处的日期解释为yyyyMMdd)
我的问题是如何使用Scala处理Play 2.0中的请求参数绑定和解释,特别是考虑到这两个参数都应该是可选的.
这些参数应该以某种方式在"路线"规范中表达吗?或者,响应的Controller方法应该以某种方式从请求对象中分离出params吗?还有另一种方法吗?
在Scala中,代数数据类型被编码为sealed
一级类型层次结构.例:
-- Haskell
data Positioning a = Append
| AppendIf (a -> Bool)
| Explicit ([a] -> [a])
Run Code Online (Sandbox Code Playgroud)
// Scala
sealed trait Positioning[A]
case object Append extends Positioning[Nothing]
case class AppendIf[A](condition: A => Boolean) extends Positioning[A]
case class Explicit[A](f: Seq[A] => Seq[A]) extends Positioning[A]
Run Code Online (Sandbox Code Playgroud)
随着case class
ES和case object
S,斯卡拉产生了一堆东西一样equals
,hashCode
,unapply
(通过模式匹配使用)等这使我们的许多关键特性和传统的ADT功能.
但是有一个关键的区别 - 在Scala中,"数据构造函数"有自己的类型.比较以下两个例子(从相应的REPL复制).
// Scala
scala> :t Append
Append.type
scala> :t AppendIf[Int](Function const true)
AppendIf[Int]
-- Haskell
haskell> :t Append …
Run Code Online (Sandbox Code Playgroud)