小编df'*_*df'的帖子

如何在play-framework 2.0中绑定复杂类型

我有一个以下结构的模型类:

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值始终是一个字符串.是否有其他方法可以自动将输入绑定到用户对象?

谢谢

java playframework-2.0

8
推荐指数
2
解决办法
5927
查看次数

Play Framework 2.0:自定义格式化程序

我正在尝试编写一个自定义格式化程序(对于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)

java playframework-2.0

6
推荐指数
1
解决办法
4400
查看次数

Scala:如何从地图制作哈希(Trie)地图(通过播放中的Anorm)

看了这个帖HashTrieMapsdocs.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)

scala playframework anorm

4
推荐指数
1
解决办法
2275
查看次数

Play 2.0.2-RC2:编译器不适合我(Twitter Bootstrap)

目标

我的目标是通过我的Play 2.x scala项目让Twitter Bootstrap值得.因为我无法让它变得糟透了所以我决定开始一个空项目,看看我是否可以得到"少"的悬念.那就是我被困的地方,因为我似乎无法"减少"编译/做任何事情!

在空项目中简单再现

  • 下载http://www.playframework.org/download play-2.0.2-RC2.zip并将其解压缩到我的debian linux box.(为什么玩-2.0.2-RC2?因为那里的'less'版本与这里提到的最新的twitter bootstrap兼容.)
  • 创建了一个新的游戏项目play new zzz(zzz =测试项目的名称).
  • 去了zzz/public/stylesheets并添加了一个名为的文件q.less(其内容是此页面上的第一个示例http://lesscss.org/,简单的变量名称用法).
  • 因为我play clean-all每次都要测试很多次:在每个新测试/ Build.scala/etc文件更改之前的命令行中.
  • 开始play并输入:

情节变粗

现在,在阅读谷歌群组的消息后,我发现了两件事:

  1. 他暗示Build.scala中较少的编译器只构建某些文件.对于我的空'zzz'测试项目来说这不是问题(因为它没有部分twitter bootstrap更少的文件),但我还是添加了这些线来测试:lessEntryPoints <<= baseDirectory(_ / "app" / "assets" / "stylesheets" ** "q.less").
    • 注意:如果我play-less-entry-points在播放控制台输入,我会得到两条空行,只是说"[info]"......仅此而已.有什么不对吗?
  2. 他(和其他人)提到了播放命令play-copy-assetscopy-resources.我在'(*)'的上述复制步骤中输入了这些命令.同样的结果,没有css文件.

编辑:我的'目标'目录列表 …

less playframework-2.0

2
推荐指数
1
解决办法
1292
查看次数

标签 统计

playframework-2.0 ×3

java ×2

anorm ×1

less ×1

playframework ×1

scala ×1