[英]Different URL-selected views for one controller method in Play framework 2.3
我了解,播放将请求的答案分为两层:controller方法将所有数据放在一起,视图实际上创建了输出。
我有一个功能“获取客户列表”。 控制器创建一个列表。 现在,我想要的是此控制器结果的两个输出:
1)我想要通常的HTML输出,因此需要打印的控制器
...<table><tr><th>Name</th>...</tr>
<tr><td>Smith</td>...</tr>
...
</table>...
2)从同一列表中,我还将创建一个包含客户数据作为JSON信息的JSON(或CSV或XML)文件。
根据我对Play的了解,应该可以通过在控制器的末尾放置另一个视图渲染器来获得此效果。 我会有两个网址,例如
/customer/list.html
和
/customer/list.json
它返回两个格式不同的结果,但是使用相同的控制器(顺便说一下,用Java实现)。
能做到吗? 如何才能做到这一点? 还是我的方法不明智?
最好的问候,德克
由于不确定Play Java的内容,我有点不愿在这里回答,但是您可以采取两种方法:
假设您同时支持HTML和JSON输出(默认为HTML)。您可以这样定义一条路由:
GET /customer/list$format<(\.(:?html|json))?> controllers.Application.renderMyList(format: String)
(注意:.type后缀是可选的,您可以使用/list.html
或/list.json
或仅使用/list
。 在此处详细了解正则表达式动态路由参数。)
您的操作可能如下所示:
public static Result renderMyList(String format) {
List<Something> myList = getMyList();
if (format.equals(".json") {
Ok(convertToJson(myList));
} else {
Ok(views.html.myList(myList));
}
}
另一方面,您可以使用不同的固定参数显式定义指向同一操作的两条路由:
GET /customer/list.html controllers.Application.renderMyList(format: String = ".html")
GET /customer/list.json controllers.Application.renderMyList(format: String = ".json")
但是我认为第一种选择更为简洁,而且通常更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.