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) {
       ...
    }
    

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

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/zhiji6/p/4444923.html
Copyright © 2011-2022 走看看