两天前我写了这个问题: 如何在@WindowScoped 上检索对象? BalusC 回答了一些建议,现在我有一些问题要理解,如果我的问题是 WindowScoped 中的对象存储正确还是我检索它的代码是错误的!
好吧,正如我所说,我有一个存储在 @WindowScoped 注释中的对象,但我只能在第一次检索这个对象!为什么?
我只是有一个疑问:可以以某种方式配置 MyFaces 的 CODI 扩展吗?或者我可以使用它简单地将 jar 文件添加到我的项目中?
但是,这些是我的代码的一部分,因为我不知道问题出在哪里:
LogicBean.java(我应该检索的对象):
@ManagedBean (name="logicBean" )
@WindowScoped
public class LogicBean implements Serializable
{
String pageIncluded;
// getter and setter methods
public String action(String value)
{
setPageIncluded(value);
return "include";
}
}
包括.xhtml:
<ui:include src="#{logicBean.pageIncluded}"/>
ProgettiController.java
@ManagedBean(name = "progettiController")
@SessionScoped
public class ProgettiController implements Serializable {
private FacesContext context = FacesContext.getCurrentInstance();
private LogicBean logicBean = context.getApplication().evaluateExpressionGet(context, "#{logicBean}", LogicBean.class);
//getter and setter methods
public void testMethod()
{
logicBean.action("WEB-INF/jsf/page1.xhtml");
}
}
我也尝试使用 @ManagedProperty("#{logicBean}") 并将范围设置为 WindowScoped 但没有任何改变......
编辑:经过一些新的试验后,我发现了一个奇怪的问题,在我的 include.xhtml 上,我添加了 #{progettiController.logicBean.getPageIncluded()} 和 #{logicBean.getPageIncluded()} 来检查这两个字段吗?
好吧,当我第一次加载应用程序时,变量设置正确并且我看到了我想要的,第二次第一个变量设置了新值但第二个是空的,我什么也看不到,但是现在奇怪的事情来了...如果我应该再试一次应用程序,我应该打开 index.xhtml ,其中有一些像这样的表单:
<h:form>
<h:commandLink action="#{logicBean.action('/WEB-INF/jsf/progetti/List.xhtml')}" value="Show All Progetti Items"/>
</h:form>
结果是什么?第一个变量仍然设置为旧值(错误),但第二个设置正确,因此我可以像我一样查看页面!如果有人可以帮助我,我将永远感谢他/她!