Olá desenvolvedores, neste tutorial falaremos sobre o escopo do ManagedBean, a anotação @SessionScoped, que cumpre o objetivo de manter a instância durante diversas requisições. Assim, ao contrário da @ViewScoped, a session scope mantém a instância mesmo em navegações entre páginas ou até que a sessão do usuário seja invalidada ou o tempo limite seja atingido.

No tutorial sobre o “REQUEST SCOPE” vimos que o ciclo de vida da anotação @RequestScoped é de apenas uma submissão. Em “VIEW SCOPE” os dados permanecem em tela e a sessão permanece ativa até que o usuário navegue para uma próxima página.

Porque agora não queremos que os dados sejam perdidos mesmo quando o usuário navegar para uma próxima tela. Neste cenário, o escopo recomendado é a session scope que consegue manter a interação do usuário com a aplicação por meio de várias solicitações HTTP. Vale ressaltar ainda que com a @SessionScope cada usuário possui uma sessão única de navegação, portanto, os objetos não são compartilhados entre os usuários.

CONTEXTO DA APLICAÇÃO

Considere uma aplicação simples onde temos um campo inputText para que o usuário adicione um nome qualquer. E um commandButton representando um parâmetro de ação para a chamada do método addNome() que adicionará o nome a uma lista. Lista esta que deverá ser exibida na mesma tela de cadastro.

Os nomes que serão adicionados à lista serão exibidos na página por meio de uma dataTable que varre a lista de nomes, e os adiciona a variável “nome”. Esta variável será a responsável por exibir em uma coluna – column, o valor da variável, isto é, o nome adicionado no campo inputText. O componente utilizado para exibir o nome é na coluna é o outputText.

BOAS PRÁTICAS

Como já mencionado em outros tutoriais é sempre uma boa prática limpar os dados em cache do projeto. E assim forçar o carregamento da versão mais recente da aplicação. Desse modo poderemos limpar os dados temporários ou que permanecerm de uma implementação anterior e que pode implicar no não funcionamento correto do seu sistema.

E para limpar os dados da memória de um dado projeto, com ele selecionado clique no menu Project >> Clean… Selecione novamente o projeto e clique em “OK”. Publique e start o projeto.

ANOTAÇÃO @SESSIONSCOPED

Com escopo do ManagedBean, @SessionScoped, você pode, enquanto a sessão estiver aberta, navegar para uma outra página, abrir a mesma sessão em uma segunda aba do navegador. Enfim, enquanto a sessão estiver aberta para um determinado usuário ele poderá interagir com a aplicação com mais liberdade e flexibilidade de navegação.

EM POUCAS PALAVRAS

E se eu abrir a mesma sessão em um novo navegador? Neste caso você não estaria abrindo a mesma sessão, mas sim iniciando uma nova. No entanto, uma vez iniciada uma nova sessão enquanto ela estiver aberta ele manterá a instância durante diversas requisições.