1

在这篇动态 ui:include帖子中,我询问了如何将对象存储在某种状态下,以允许我加载同一浏览器的新窗口或选项卡,并且它也没有存储在新窗口中。Adrian Mitev 告诉我使用@WindowScoped名为 CODI 的 MyFaces 扩展选项,我尝试实现它。

现在我应该说我是盲人,当我试图打开 Apache Wiki 时,我的浏览器在许多页面上崩溃,所以我无法阅读指南。

但是我在我的项目中添加了源代码,编译器没有给出任何错误。问题是,现在当我尝试检索我存储的 bean 时页面@WindowScoped无法正常工作!

我在我的 bean 中使用这个代码:

@ManagedBean (name="logicBean" )
@WindowScoped

include.xhtml我使用以下代码检索参数时:

<ui:include src="#{logicBean.pageIncluded}"/> 

在我的其他 bean 中,我LogicBean使用此代码检索 (我确定问题出在此代码上)

LogicBean l = (LogicBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("logicBean");

如何检索“正确”的 LogicBean 对象?

4

1 回答 1

2

您正在尝试LoginBean从会话映射中获取。@SessionScoped这仅适用于具有标准 JSF注释的会话范围 bean 。

访问其他 bean 的规范方法是@ManagedProperty在检索 bean 上使用。

例如

@ManagedBean
@RequestScoped
public class OtherBean {

    @ManagedProperty("#{logicBean}")
    private LogicBean logicBean;

    // Getter+Setter.
}

如果您确实需要通过以编程方式评估 EL 在方法块内访问它,则应该Application#evaluateExpressionGet()改用:

FacesContext context = FacesContext.getCurrentInstance();
LogicBean logicBean = context.getApplication().evaluateExpressionGet(context, "#{logicBean}", LogicBean.class);
// ...
于 2012-01-18T14:47:52.980 回答