zoukankan      html  css  js  c++  java
  • Play 可以做的 5 件很酷的事

    Play 可以做的 5 件很酷的事

    本章译者:@Playframwork

    通过 5 个实例,透视 Play 框架背后的哲学。

    绑定 HTTP 参数到 JAVA 方法参数

    用 Play 框架,在 Java 代码中获取 HTTP 请求参数是非常简单的,只需要声明方法的参数名和 HTTP 请求的参数名一样就可以了。

    例如,这个请求:

    /articles/archive?date=08/01/08&page=2
    

    把 date 和 page 声明为 Java 方法的传入参数,就可以获取 HTTP 请求中 date 和 page 参数的值了:

    public static void archive(Date date, Integer page) {
        List<Article> articles = Articles.fromArchive(date, page);
        render(articles);
    }
    

    Play 框架会根据声明的 Java 参数类型,自动把 HTTP 请求参数转换成对应的 Java 对象。

    这种自动绑定也适用于 任何的 Java 对象 。

    public class Person {
        public String name;
        public Integer age;
    }
    

    一个简单的用于添加用户的控制器的 action 方法可以像这样:

    public static void add(Person p) {
        p.save();
    }
    

    对应的 HTML 表单域使用复合的参数名:

    <form action="/Directory/add" method="POST">
        Name: <input type="text" name="p.name" />
        Age: <input type="text" name="p.age" />
    </form>
    

    通过调用对应的 Java 方法进行重定向

    Play 没有等价于 Java Servlet forward 命令的方法,但是实现重定向确实非常简单。只需调用相应的 Java 方法,Play 就会自动生成正确的重定向( HTTP Redirect )响应给客户端。

    public static void show(Long id) {
        Article article = Article.findById(id);
        render(article);
    }
     
    public static void edit(Long id, String title) {
        Article article = Article.findById(id);
        article.title = title;
        article.save();
        show(id);
    }
    

    注意在 edit 方法的最后,是如何使我们重定向到 show 方法对应的页面的。

    在任何模板文件中,你可以利用同样的语法生成链接:

    <a href="@{Article.show(article.id)}">${article.title}</a>
    

    将会生成以下 HTML 内容:

    <a href="/articles/15">My new article</a>
    

    不要重复地将 Java 对象传递到模板文件

    在大多数的 Java 框架中,为了把 Java 对象传递到模板文件,通常你需要类似这样写:

    Article article = Article.findById(id);
    User user = User.getConnected();
    Map<String, Object> model = new HashMap<String,Object>();
    model.put("article", article);
    model.put("user", user);
    render(model);
    

    使用 Play,你只须这样写:

    Article article = Article.findById(id);
    User user = User.getConnected();
    render(article, user);
    

    然后你就可以从模板中获取相应的 Java 变量。这样剩下了不少重复无用的代码…

    JPA 持久化

    JPA 无疑是目前 Java 领域最佳的对象关系映射框架( ORM )。如果你熟悉 JPA,你会惊讶于它在 Play 框架中变得如此简单。不需要任何配置,Play 会自动启动 JPA 实体管理器,并在代码发生修改时自动地同步。

    而且如果你使用 Play 提供的 play.db.jpa.Model 作为超类时,它会帮助你把代码写得更漂亮。来看一下:

    public void messages(int page) {
        User connectedUser = User.find("byEmail", connected()).first();
        List<Message> messages = Message.find(
            "user = ? and read = false order by date desc",
            connectedUser
        ).from(page * 10).fetch(10);
        render(connectedUser, messages);
    }
    

    简单易用的文件上传管理

    在 Play 框架里文件上传管理非常简单。

    以下 HTML 表单:

    #{form @uploadPhoto(), enctype:'multipart/form-data'}
        <input type="text" name="title" />
        <input type="file" id="photo" name="photo" />
        <input type="submit" value="Send it..." />
    #{/}
    

    和这段 Java 代码:

    public static void uploadPhoto(String title, File photo) {
       ...
    }
    

    就完成了! 再简单不过了吧?

  • 相关阅读:
    CF1439E
    CF1446
    CSP2020 游记
    CF1442
    CF1444E
    CF1444
    CF850F Rainbow Balls
    A
    uoj266[清华集训2016]Alice和Bob又在玩游戏(SG函数)
    loj536「LibreOJ Round #6」花札(二分图博弈)
  • 原文地址:https://www.cnblogs.com/zhiji6/p/4444923.html
Copyright © 2011-2022 走看看