2010-01-06 5 views
3

Je suis assez nouveau dans JSF et je fais quelques choses de base pour avoir une idée de la façon dont on devrait travailler avec. Dans mon un des projets que j'ai un ManagedBean, SessionScoped comme ci-dessousJSF - Accès à un bean géré SessionScoped

@ManagedBean(name="user") 
@SessionScoped 
public class User implements Serializable 
// Having a couple of String properties (with setters and getters). 

Maintenant, dans une page sous une forme que j'ai un <h:inputText id="firstName" value="#{user.firstName}" ... /> que je vous attendre à obtenir une valeur de l'utilisateur et le mettre dans mon Bean propriété. La deuxième page affiche simplement les données d'entrée, en y accédant depuis le bean. (<h:outputText value="${user.firstName}"/>). Le problème est que si après cela je vais dans une troisième page (juste en tapant l'URL) et j'essaie d'utiliser la même ligne pour afficher à nouveau les données du bean, aucune donnée ne s'affiche. Je m'attendais à ce que pendant que le bean est en session, il devrait toujours être disponible dans la session en cours.

+0

Êtes-vous en train d'ouvrir un nouveau navigateur? Un nouveau navigateur signifie une nouvelle session. –

+0

Pas nécessairement, MCA. Depuis IE8 et FF3, toutes les fenêtres/instances/onglets ouverts en même temps partagent la même session. Seul l'ouverture d'un navigateur * différent * créera une nouvelle session. – BalusC

+0

Oui c'est vrai que certains navigateurs partagent les cookies à travers de nouvelles instances ... –

Répondre

8

Assurez-vous que vous utilisez import javax.faces.bean.SessionScoped, au lieu de javax.enterprise ...;

+0

Quelle est la différence entre les deux? – tuxayo

0

Peut-être que quelqu'un est toujours intéressé par ceci: J'ai rencontré le même comportement que décrit ci-dessus. La solution a finalement été de remplacer @ManagedBean via @Named. Jusqu'à présent, je n'ai pas compris la sémantique de l'annotation @ManagedBean. Donc je ne peux pas expliquer ce qui fait la différence.

+0

Apparemment, vous avez initialement utilisé l'annotation '@ SessionScoped' du mauvais paquet, exactement comme Daniel. Si vous l'utilisez depuis le paquet 'javax.enterprise.context' de CDI, cela ne fonctionnera pas avec' @ ManagedBean' qui attend le paquet 'javax.faces.bean'. Vous êtes ici en train de proposer la solution inverse. – BalusC

Questions connexes