play教程 第五课 play中Controller的用法

Controller(控制器)是play中MVC的“C”部分,在 Play 框架中,控制器其实就是一个 Java类,位于 controllers 包中,继承了父类 play.mvc.Controller。 举个简单的例子:

{(Long id) {Client client = Client.findById(id);render(client);}(Long id) {Client client = Client.findById(id);client.delete();}}

在这个示例控制器中,每一个被声明为 public static 的方法都被称为 Action, 每个 Action 的形式如下所示:

(params…);-类同比较与servlet类比

传统的Servlet中,我们在dopost()/doget()方法进行操作,通过request对象获取数据,通过response对象返回数据。

与Struts中的Action类比

Action是struts的核心功能,通过类似下面的配置文件来配置接收类和返回地址

<action name=”user” class=”org.lesson05.UserAction”><result name=”success”>/Methods/list.jsp</result></action>与SpringMVC的Controller类比

play的Controller和SpringMVC中的Controller最为相似,如下是SpringMVC的Controller写法,指定了来回传递的参数和返回的页面

@RequestMapping({“/hello” ,”/” })/**** @param name 页面传来的值* @param model 返回给页面的值* @return*/public String hello(String name,Model model){String username = “Hello,My name is “+name ;model.addAttribute( “username”, username);User u = new User(25, “万里”);model.addAttribute( u);return “hello”;}-约法三章

1.所创建的Controller类必须在app/controllers目录下,目录名不能变 2.所创建的Controller类必须继承play.mvc.Controller类 3.所创建的Controller类中的方法必须是public static修饰

-如何传参传参的几种方法:

1./article?id=123 2./article/123 3.POST传参 Play能接受所有的传参形式,并且能够自动转换参数类型

传递日期

日期数据支持以下几种格式的自动转换:

* yyyy-MM-dd’T’hh:mm:ss’Z’ // ISO8601 + timezone* yyyy-MM-dd’T’hh:mm:ss” // ISO8601* yyyy-MM-dd* yyyyMMdd’T’hhmmss* yyyyMMddhhmmss* dd’/‘MM’/’yyyy* dd-MM-yyyy* ddMMyyyy* MMddyy* MM-dd-yy* MM’/‘dd’/’yy

例如: 前端请求方式:archives?from=21/12/1980

(Date from) {List<Article> articles = Article.findBy(“date >= ?”, from);render(articles);}传递数组或集合

所有被支持的类型都可以通过数组或者集合来获取:

public static void show(Long[] id) {…}

或者

public static void show(List<Long> id) {…}

或者

public static void show(Set<Long> id) {…}传递对象

如前端通过这种方式传参 addSubscriber?user.name=Wayne&user.login=wayneellis&user.password=secret 我们在后台可以这样接收

public static void addSubscriber(User user) {…}传递文件

在 Play 框架中处理文件上传是非常简单的事,一个 multipart/form-data 编码的请求发送到服务器, Play 框架会自动为该上传文件生成一个 File 对象。如下所示:

前端页面

<form method=”post” action= “@{Products.upload()}” enctype=”multipart/form-data” ><input type= “file”name =”photo”></form>

后台逻辑

public static void upload(File photo) {//…// 保存图片操作//…}-Response

在play中,通常有两类response的方式——render和redirect,下面具体介绍。

Render

–render() render()方法是最常用的,直接跳转至与该方法同名的html,当然,我们也可以通过这种方式,跳转至指定的html文件(即play术语中所谓的模版) render(“Application/dontSayHello.html”, myName); 如果需要传参,那么直接在render()方法中写上参数即可,如render(args1,args2),页面接收直接用“{args1}。 –renderJSON() 这个方法用来传递JSON格式的数据,比如我们在使用ajax时,,如果用到json格式数据,那么就需要这个方法。 –renderText() 简单传递一个text。 –renderXML() 返回XML格式的对象。 –renderBinary() 可以传回去一个文件或者输入流对象。 需要说明一点,render下面的语句是不被执行的,如

(String myName) {render(myName);// Warning: this code will never be executed!System.out.println(“这一行是不能被执行的,不信你试试!”);}Redirect

Play 提供了一个 redirect 方法,可以将请求调整到其他的 URL 地址:

() {redirect(“http://www.baidu.com”);}-Action 链

Action 链与 Servlet API 中的 forward 并不相同,一个 HTTP 请求只能调用一个 action 。如果你需要调用其他的 action ,你必须将浏览器重定向到你想要调用的 action 上。这样后退、前进和刷新操作就会简单很多。 你可以重定向到任意一个 action,只需要简单的调用该 action 方法而已, Play 框架会自动将这种形式的调用解析为 HTTP 的重定向。 例如:

{(Long id) {Client client = Client.findById(id);render(client);}(String name) {Client client = new Client(name);client.save();show(client.id);}}

人生没有彩排,只有现场直播,所以每一件事都要努力做得最好

play教程 第五课 play中Controller的用法

相关文章:

你感兴趣的文章:

标签云: