有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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()


共 (2) 个答案

  1. # 1 楼答案

    拦截器和操作共享相同的请求上下文(请求、响应、会话等)。如上所述,您可以选择使用渲染器,但请记住,这些值将在您的视图中可用,这可能不是您想要的。如果您想保持拦截器和操作之间的状态,只需使用请求即可。改为args散列

  2. # 2 楼答案

    您可以使用控制器中的renderArgs参数(请参见here),也可以将该值存储在缓存中(我们可以假设,由于该值是在几毫秒前添加的,所以您的值在同一请求中可用)