我有一个以下结构的模型类:
public class User {
public String name;
public Long id;
}
public class Play {
public String name;
public User user;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要一个基于Play类的表单.所以我有一个editPlay
视图Form[Play]
作为输入.在视图中,我有一个表单,它在提交时调用更新操作:
@form (routes.PlayController.update())
{..}
Run Code Online (Sandbox Code Playgroud)
但我找不到以我在控制器中正确接收它的方式绑定用户字段的正确方法:
Form<Play> formPlay = form(Play.class).bindFromRequest();
Play playObj = formPlay.get();
Run Code Online (Sandbox Code Playgroud)
根据API,Form.Field
值始终是一个字符串.是否有其他方法可以自动将输入绑定到用户对象?
谢谢
我正在尝试编写一个自定义格式化程序(对于DateTime字段,而不是java.util.Date字段),但我很难让它工作.我已经创建了我的注释,并扩展了AnnotationFormatter类.我在Application load上调用了play.data.format.Formatters.register(DateTime.class,new MyDateTimeAnnotationFormatter()),但是解析和print方法永远不会触发.
我该怎么做?
编辑:有问题的代码可能会有所帮助;)
注释类(受Play Framework附带的注释类的启发):
@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}
Run Code Online (Sandbox Code Playgroud)
自定义格式化程序类:
public static class AnnotationDateTimeFormatter extends AnnotationFormatter<JodaDateTime, DateTime> {
@Override
public DateTime parse(JodaDateTime annotation, String text, Locale locale) throws ParseException {
if (text == null || text.trim().isEmpty()) {
return null;
}
return DateTimeFormat.forPattern(annotation.pattern()).withLocale(locale).parseDateTime(text);
}
@Override
public String print(JodaDateTime annotation, DateTime value, Locale locale) {
if (value == null) {
return null;
}
return …
Run Code Online (Sandbox Code Playgroud) 看了这个帖HashTrieMaps上docs.scala-lang.org:
例如,要在地图中找到给定的密钥,首先要获取密钥的哈希码.然后,哈希码的最低5位用于选择第一个子树,然后是接下来的5位,依此类推.一旦存储在节点中的所有元素具有在直到该级别选择的位中彼此不同的哈希码,则选择停止.
我认为这是一个很棒的(读取:快!)集合来存储我的Map [String,Long].
在我的Play框架中(使用Scala)我使用Anorm加载了大约18k个元素的代码片段.加载需要几秒钟(没什么大不了的,但任何提示?).我希望将它"存储在内存中",以便快速查找字符串到长时间的翻译.
val data = DB.withConnection { implicit c ?
SQL( "SELECT stringType, longType FROM table ORDER BY stringType;" )
.as( get[String]( "stringType" ) ~ get[Long]( "longType " )
map { case ( s ~ l ) ? s -> l }* ).toMap.withDefaultValue( -1L )
}
Run Code Online (Sandbox Code Playgroud)
此代码data
的类型class scala.collection.immutable.Map$WithDefault
.我希望这是一个类型HashTrieMap
(或者HashMap
,据我所知,链接引用所有Scala HashMaps都是HashTrieMap?).奇怪的是,我没有找到如何将其转换为HashTrieMap的方法.(我是Scala,Play和Anorm的新手.)
// Test for the repl (2.9.1.final). Map[String, Long]:
val data = Map( "Hello" -> 1L, "world" …
Run Code Online (Sandbox Code Playgroud) 我的目标是通过我的Play 2.x scala项目让Twitter Bootstrap值得.因为我无法让它变得糟透了所以我决定开始一个空项目,看看我是否可以得到"少"的悬念.那就是我被困的地方,因为我似乎无法"减少"编译/做任何事情!
play new zzz
(zzz =测试项目的名称).zzz/public/stylesheets
并添加了一个名为的文件q.less
(其内容是此页面上的第一个示例http://lesscss.org/,简单的变量名称用法).play clean-all
每次都要测试很多次:在每个新测试/ Build.scala/etc文件更改之前的命令行中.play
并输入:
reload
(真的不知道为什么)compile
(根据:http://www.playframework.org/documentation/2.0.1/AssetsLess)find . -name *.css
它并没有向我显示我的'q.css'.现在,在阅读谷歌群组的消息后,我发现了两件事:
lessEntryPoints <<= baseDirectory(_ / "app" / "assets" / "stylesheets" ** "q.less")
.
play-less-entry-points
在播放控制台输入,我会得到两条空行,只是说"[info]"......仅此而已.有什么不对吗?play-copy-assets
和copy-resources
.我在'(*)'的上述复制步骤中输入了这些命令.同样的结果,没有css文件.