getApplication()。evaluateExpressionGet尝试创建新实例(jsf 2.0 - > 2.2迁移问题?)

时间:2014-09-01 19:07:37

标签: jsf-2 jsf-2.2 myfaces

由于某种原因(想知道为什么......)在创建我的bean之后(作为ValueExpressionImpl的结果:#{admin.userLocale}(我在构造函数的断点中的堆栈跟踪中看到它) ,紧接着我的phaselistener在调用以下命令时失败(异常)

return context.getApplication().evaluateExpressionGet(context,
            "#{myBean}", myBean.class);

上面代码的执行第二次触发构造函数 - 为什么?

奇怪的是,我得到了确切的机制正常工作(bean构造函数调用 - >阶段监听器调用“命令”(不再调用bean构造函数))在许多其他应用程序中...但在那个特定的应用它不工作。

另外一个重要的注意事项,使用MyFaces 2.0.11这款应用可以正常使用

我检查了faces-config / web.xml与其他应用程序一样的双重和三重检查

从MyFaces JSF 2.0.11迁移到2.2.3后我得到的例外是:

  

javax.faces.view.facelets.TagAttributeException:/ viewMetadata/myPage.xhtml at line 13 and column 38 locale =“#{myBean.userLocale}”null

...

  

引起:java.lang.NullPointerException           在org.apache.myfaces.config.ManagedBeanBuilder.getScope(ManagedBeanBuilder.java:560)

我做了一些谷歌并找到了以下MYFACES-3907,我甚至尝试应用修复程序,但它只是删除了异常,但我的webapp仍然不好

p.s其中@SessionScopedgetApplication().evaluateExpressionGet被调用的阶段ID为RESTORE_VIEW

关于如何找出导致问题的原因的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

发现问题......虽然我不知道为什么(确实有一些理论)

在我的那个豆里有一个ManagedProperty ......

@ManagedProperty(value = "#{error}")
private ErrorPageMBean error;  //with getter/setter

那个有管理的财产已存在多年,甚至没有使用过。再一次,它在MyFaces 2.0.11中运行得很好......

我删除它的那一刻开始工作得很好......

有什么想法ManagedProperty