java在play框架中有没有一种在拦截器和操作之间共享数据的方法?
在剧中!控制器,我可以创建一个interceptor method,它将在每个请求到达适当的操作之前对其进行处理
public class Admin extends Application {
@Before
static void checkAuthentification() {
if(session.get("user") == null) login();
// otherwise,
User loggedOnUser = User.find("byUsername", session.get("user"));
}
public static void index() {
// any way to access loggedOnUser ?
List<User> users = User.findAll();
render(users);
}
…
}
有没有办法在拦截器中设置一个值并在操作中访问它?有点像servlet中的request.setAttribute()
# 1 楼答案
拦截器和操作共享相同的请求上下文(请求、响应、会话等)。如上所述,您可以选择使用渲染器,但请记住,这些值将在您的视图中可用,这可能不是您想要的。如果您想保持拦截器和操作之间的状态,只需使用请求即可。改为args散列
# 2 楼答案
您可以使用控制器中的renderArgs参数(请参见here),也可以将该值存储在缓存中(我们可以假设,由于该值是在几毫秒前添加的,所以您的值在同一请求中可用)