您的位置:首页 > 其它

play框架使用起来(6)

2016-11-03 15:16 232 查看
1、概述

Play的控制层位于应用的controllers包中,其中的Java类即为控制器(Controller)。如图4.1所示,Application.java和MyController.java都属于控制层。



(图4.1 控制器为controllers包中的Java类)

      控制器需要继承play.mvc.Controller:

package controllers;
 
import models.Client;
import play.mvc.Controller;
 
public class Clients extends Controller {
 
    public static void show(Long id) {
        Client client = Client.findById(id);
        render(client);
    }
 
    public static void delete(Long id) {
        Client client = Client.findById(id);
        client.delete();
    }
 
}


      在控制器中,每个以public static声明,返回值为void的方法称为Action。Action的方法声明如下:

public static void action_name(params…);


      Play会自动将HTTP请求参数转化为与之相匹配的Action方法参数,这部分内容会在后面的获取HTTP参数小节进行详细讲解。通常情况下,Action方法无需返回任何值,以调用结果方法来终止执行。在上述例子中,render(…)方法就是用来渲染模板的结果方法。

2、获取HTTP参数

 HTTP请求中往往包含各种参数,这些参数的传递形式如下:
URI路径:在路径/clients/1541中,1541是URI的动态部分。
查询字符串:clients?id=1541。
请求体:如果请求是来自HTML的表单提交(GET或者POST),那么请求体包含的是表单数据(采用x-www-urlform-encoded作为编码格式)。

      针对以上几种情况,Play会自动提取这些HTTP参数并将他们保存在Map<String,String>类型的变量中,以参数名作为Map的key。这些参数名分别来自于:
URI中动态部分的名称(在routes文件中定义)。
查询字符串中“名称/值”对中的名称部分 。
采用x-www-urlform-encoded编码的表单数据的参数名。


2.1 使用Map参数#

HTTP请求中参数对象(params)在任何控制器中都是可访问的(该实现在play.mvc.Controller超类中定义),它包含了当前所有HTTP请求的参数,并且可以通过get()方法得到,具体如下:

public static void show(){
    String id=params.get("id");
    String[] names=params.getAll("name");
}


      这些参数也可以进行类型转换:

public static void show(){
    Long id=params.get("id",Long.class);
}


      本节将推荐一种更好的解决方案。Play框架提供了自动将Action声明的参数与HTTP参数自动匹配的功能(只需要保持Action方法的参数名和HTTP参数名一致即可):

/clients?id=1541


      Action方法可以在声明中以id作为参数,以此匹配HTTP中变量名为id的参数:

public static void show(String id){
    System.out.println(id);
}


      当然,也可以使用其他Java参数类型,而不仅仅是String。在下面的例子中框架会自动将参数转换为正确的数据类型:

public static void show(Long id){
    System.out.println(id);
}


      如果参数含有多个值,那么可以定义数组参数,具体如下:

public static void show(Long[] id){
    for(Long anId:id){
        System.out.println(anId);
    }
}


      参数甚至可以是List类型:

public static void show(List<Long> id){
    for(Long anId:id){
        System.out.println(anId);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: