我的加入看起来像这样:
def byIdWithImage = for {
userId <- Parameters[Long]
(user, image) <- Users leftJoin RemoteImages on (_.imageId === _.id) if user.id === userId
} yield (user, image)
Run Code Online (Sandbox Code Playgroud)
但是当user.imageId为null时,浮动在运行时失败
[SlickException:读取列RemoteImage.url的NULL值]
将收益率改为
} yield (user, image.?)
Run Code Online (Sandbox Code Playgroud)
给我一个编译时异常,它只适用于各个列
找不到scala.slick.lifted.TypeMapper [image.type]类型的证据参数的隐含值
有没有不同的方法来完成我在这里尝试做的事情?(在单个查询中)
我的控制器动作代码如下所示:
def addIngredient() = Action { implicit request =>
val boundForm = ingredientForm.bindFromRequest
boundForm.fold(
formWithErrors => BadRequest(views.html.Admin.index(formWithErrors)),
value => {
Async {
val created = Service.addIngredient(value.name, value.description)
created map { ingredient =>
Redirect(routes.Admin.index()).flashing("success" -> "Ingredient '%s' added".format(ingredient.name))
}
// TODO on exception do the following
// BadRequest(views.html.Admin.index(boundForm.copy(errors = Seq(FormError("", ex.getMessage())))))
}
})
}
Run Code Online (Sandbox Code Playgroud)
我的Service.addIngredient(...)返回一个Promise [Ingredient],但也可以抛出一个自定义的ValidationException.抛出此异常时,我想返回注释代码.
目前页面呈现为500,在日志中我有:
玩 - 等待承诺,但得到一个错误:名称'test'的成分已经存在.services.ValidationException:名称为'test'的成分已存在.
两个问题:
我的Java应用程序正在"user.home"中保存内容,但在Windows上,这似乎不是保存应用程序信息的正确途径(正如朋友告诉我的那样).另一种选择是使用首选项api,但是无法使用首选项api设置hsqldb位置.此外,我希望所有文件在同一文件夹(本地数据库,配置,缓存,...)中可用.
我正在寻找一些示例代码或一个处理特定于os的东西的框架.
这是我的搜索对象:
package models.helper
import play.api.libs.json.Format
import play.api.libs.json.JsValue
import play.api.libs.json.JsObject
import play.api.libs.json.JsString
case class Search (name: String, `type`:String){
implicit object SearchFormat extends Format[Search] {
def reads(json: JsValue): Search = Search(
(json \ "name").as[String],
(json \ "type").as[String]
)
def writes(s: Search): JsValue = JsObject(Seq(
"name" -> JsString(s.name),
"type" -> JsString(s.`type`)
))
}
}
Run Code Online (Sandbox Code Playgroud)
我在尝试使用WS调用web服务时尝试使用此类:
val search = response.json.as[Search]
Run Code Online (Sandbox Code Playgroud)
但scala编译器一直在抱怨这条线:
找不到类型models.helper.Search的Json反序列化器.尝试为此类型实现隐式读取或格式.
谁能告诉我我做错了什么?
在我的播放1.x控制器中我有这个:
public static void language(final String language){
Lang.change(language);
Header referer = request.headers.get("referer");
if(referer == null){
index();
}else{
redirect(referer.value());
}
}
Run Code Online (Sandbox Code Playgroud)
我想在播放2.x中做同样的事情,但我的印象是功能不再可用.这就是我到目前为止所拥有的
def language(language:String) = Action { implicit request =>
// TODO change language
val referer = request.headers.get("referer")
referer.map{ referer =>
Redirect(referer, FOUND);
}getOrElse(
Ok(views.html.index())
)
}
Run Code Online (Sandbox Code Playgroud) 在playframework 1.x中,曾经有一些用于模板引擎的捆绑java扩展:http://www.playframework.org/documentation/1.2.3/javaextensions
我在playframework 2.0中寻找相同的功能.例如,我该怎么做?
colour${['red', 'green', 'blue'].pluralize()}
Run Code Online (Sandbox Code Playgroud)
我现在正在做这件事:
We have @colours.size colour@if(colours.size > 0){s}
Run Code Online (Sandbox Code Playgroud)
这必须是更清洁,更可重复使用的方式吗?
templates template-engine scala playframework playframework-2.0
我遇到了Playframework应用程序不时没有响应的问题,我想在运行时检测到这一点,并记录当前在耗尽的执行上下文中运行的内容的日志信息.
实现这一目标的最佳策略是什么?我想过将小的runnables发布到执行上下文中,如果它们没有及时执行,我会记录一个警告.这个最大等待时间当然应该是可配置的.例如,主Web执行上下文永远不应被阻止超过1秒,但后台db执行上下文可能允许30秒阻塞.
有人必须先做过这件事吗?
相关信息:http: //www.playframework.com/documentation/2.2.x/ThreadPools
我正在使用 jenkins 和 android 插件,但似乎我的模拟器在构建过程中死掉了。logcat 到达某个活动开始时的位置,但随后就不再有任何活动了。所以它显然没有正确关闭。我可以启用其他日志来调试此问题吗?可能是模拟器内存不足造成的。
我必须处理的形式有这样的:
<label for="features_1">
<input type="checkbox" id="features_1" name="features[]" value="4"> foo
</label>
<label for="features_2">
<input type="checkbox" id="features_2" name="features[]" value="8"> bar
</label>
Run Code Online (Sandbox Code Playgroud)
我可以这样得到阵列
request.body.asFormUrlEncoded.get("features[]")
Run Code Online (Sandbox Code Playgroud)
当两个项目都被选中时,它会给我 List(4, 8)
但是当我尝试将其绑定在一个表单中时
case class MyFeatures(features: Seq[Long])
val myForm = Form (
mapping(
"features" -> seq(longNumber)
)(MyFeatures.apply)(MyFeatures.unapply)
)
Run Code Online (Sandbox Code Playgroud)
我总是得到一个空序列,与"features []"相同
编辑
以上示例实际上有效,问题出在其他地方.绑定播放时将要素转换为要素[0] = 4和要素[1] = 8,然后在seq(...)或列表(...)映射中正确处理
我很难尝试将一些模板从1.2.4翻译成2.0.
到目前为止,我设法遍历所有的flash元素,但我想分别获取Key和Message(@msgKey包含一个列表,我不知道如何拆分它:/)=> (success, Your data has been updated).
一点点的帮助将不胜感激!:)
这是原始代码:
#{if flash.data.size() > 0}
#{list items:flash.data, as:'msg'}
#{if msg.key.substring(0, 4).equals('info')}#{set msg_type:'info' /}#{/if}
#{if msg.key.substring(0, 4).equals('succ')}#{set msg_type:'success' /}#{/if}
#{if msg.key.substring(0, 4).equals('warn')}#{set msg_type:'warning' /}#{/if}
#{if msg.key.substring(0, 4).equals('erro')}#{set msg_type:'error' /}#{/if}
<div class="alert alert-${msg_type}" data-dismiss="alert">
<a title="Close that message" class="close">×</a>
${msg.value.raw()}
</div>
#{/list}
#{/if}
Run Code Online (Sandbox Code Playgroud)
这是新的:
@if(!flash.isEmpty()) {
@for(msgKey <- flash) {
<div class="alert alert-@msgKey" data-dismiss="alert">
<a title="@Messages("misc.message.close")" class="close">×</a>
@msgKey
</div>
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,我感谢!