Um action Context é basicamente um Map com algumas particularidades para facilitar a sua vida.
O Application context: (contexto da aplicação)
O Application context é um Map no escopo da aplicação que você pode utilizar para armazenar informações que devem ser acessíveis pela aplicação como um todo. É um bom lugar para armazenar um cache por exemplo.
Context application = action.getApplication(); Collection<User> users = (Collection<User>) application.getAttribute("users"); // ou armazene qualquer coisa application.setAttribute("myCache", theCache); // Nota: não faz sentido resetar o application context, logo a linha abaixo vai jogar uma exception application.reset();
A Session context: (contexto da sessão)
A Session context pode ser utilizada para persistir informações ao longo de várias requisições feitas pelo mesmo cliente. Por exemplo, autenticação utiliza a session para saber se o usuário está autenticado ou não. O contexto de sessão suporta o método reset() pra invalidar a session.
Context session = action.getSession(); session.setAttribute("user", user); // reseta a sessão session.reset();
The Cookies context: (o contexto de cookies)
Cookies são tratados automaticamente pelo Mentawai e colocados no contexto de Cookies. Você pode facilmente acessar todos os cookies do cliente, remover qualquer cookie e adicionar um novo cookie que será enviado para o navegador do cliente.
Context cookie = action.getCookies(); // pegue qualquer cookie enviado pelo navegador String someCookieValue = (String) cookies.getAttribute("myCookie"); // adicione um novo cookie cookies.setAttribute("username", username); // será enviado para o browser e persistido lá (cookie = client-side state) // remove um cookie cookies.removeAttribute("username"); // será removido do navegador do cliente quando a resposta da requisicão for enviada cookies.reset(); // joga UnsupportedOperationException - não faz sentido
Mais controle para os cookies:
Se você quiser adicionar um cookie com parâmetros como max age, domain, etc. tudo que você precisa fazer é setar um Cookie object no contexto ao invés de uma String como fizemos acima.
Cookie cookie = new Cookie("myCookie", "hello cookies!"); cookie.setMaxAge(60 * 60 * 24); // one day... cookie.setPath("/"); Context cookies = action.getCookies(); cookies.setAttribute("myCookie", cookie);