JSF - 访问一个SessionScoped管理的bean

3

我在JSF方面还比较新,正在做一些基础工作来了解如何使用它。在我的一个项目中,我有一个ManagedBean,类似于下面的SessionScoped

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

现在,在一个表单的一页中,我有一个<h:inputText id="firstName" value="#{user.firstName}" ... />,我期望从用户那里获取一个值并将其放入我的bean属性中。第二页只是显示输入数据,从bean中访问它。(<h:outputText value="${user.firstName}"/>)。
问题是,如果在此之后我进入第三页(只需键入URL),并尝试使用相同的行再次显示来自bean的数据,则不会显示任何数据。我原本以为,虽然bean是会话范围的,但它仍应该在当前会话中可用。

你是否正在打开一个新的浏览器?新的浏览器意味着新的会话。 - Murat Can ALPAY
不一定需要使用MCA。自从IE8和FF3以来,同时打开的所有窗口/实例/选项卡都共享相同的会话。只有打开不同的浏览器才会创建一个新的会话。 - BalusC
是的,有些浏览器会在新实例之间共享cookies... - Murat Can ALPAY
所有的事情都发生在同一个浏览器上(FF3)。 - user244597
2个回答

8

请确保您正在使用import javax.faces.bean.SessionScoped,而不是javax.enterprise...;


1
这两者之间有什么区别? - tuxayo

0
也许还有人对此感兴趣:我遇到了与上述描述相同的行为。最终的解决办法是用 @Named 替换 @ManagedBean。到目前为止,我还没有弄清楚 @ManagedBean 注释的语义。所以我无法解释其中的区别。

显然,你最初使用了错误的包中的@SessionScoped注解,正如Daniel所回答的那样。如果你从CDI的javax.enterprise.context包中使用它,那么它将无法与期望来自javax.faces.bean包的@ManagedBean配合使用。你在这里只是提出了相反的解决方案。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接