Jsf 在Omnifaces中禁用RestorableViewHandler

Jsf 在Omnifaces中禁用RestorableViewHandler,jsf,tomcat,myfaces,omnifaces,Jsf,Tomcat,Myfaces,Omnifaces,我在一个大型web应用程序中同时使用OmniFaces 1.10和ApacheMyFaces 2.2.6。当应用程序在生产环境中运行时,我在web服务器(Tomcat)日志中收到以下形式的虚假异常: 我确信这是一个问题,或者至少是应用程序中的一个边缘情况(例如,一个.xhtml文件错误地使用了一些bean变量),但我无法在测试用例中重现它,而且MyFaces和OmniFaces的早期版本也从未出现过这种情况 异常本身似乎被触发,因为OmniFaces“RestorableViewHandler”

我在一个大型web应用程序中同时使用OmniFaces 1.10和ApacheMyFaces 2.2.6。当应用程序在生产环境中运行时,我在web服务器(Tomcat)日志中收到以下形式的虚假异常:

我确信这是一个问题,或者至少是应用程序中的一个边缘情况(例如,一个.xhtml文件错误地使用了一些bean变量),但我无法在测试用例中重现它,而且MyFaces和OmniFaces的早期版本也从未出现过这种情况


异常本身似乎被触发,因为OmniFaces“RestorableViewHandler”尝试还原视图,只是为了查看它是否包含应自动还原的标记。当恢复的视图不包含标记时,它会丢弃(已经)恢复的视图。除了明显的性能问题外,这还会触发NullPointerException,因此我不希望出现这种情况,因此我正在寻找一种完全禁用RestorableViewHandler的方法。我知道当我这样做时,我将无法使用标记“enableRestorableView”,但这没关系。

如果不在OmniFaces source中进行黑客攻击,就无法禁用它。根据这一点,在某个地方使用了应用程序范围的属性后,允许
设置该属性,以便
RestorableViewHandler
可以决定是否尝试恢复视图

请注意,我确实更喜欢动态注册
RestorableViewHandler
,但是当应用程序以前已经处理过请求时,不可能动态注册
ViewHandler


该修复程序在今天的(以及,对于2.x用户)中可用。

RestorableViewHandler
中几乎两年没有任何技术上的更改。我猜这是一个与MyFaces有关的问题。在现代服务器硬件上构建平均视图所需时间不应超过0,05~0,15ms。然而,当托管bean参与构建视图(通过标记处理程序等)并且这些托管bean未在视图过期异常错误页面中使用时,情况确实发生了变化。想要禁用它是可以理解的。哇,太快了。非常感谢你。1.11版本是否有一个时间表,以便我们可以使用Maven?当我们觉得它需要发布时。
java.lang.NullPointerException
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver$5.put(ManagedBeanResolver.java:101)
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.putInScope(ManagedBeanResolver.java:367)
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:340)
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:296)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:179)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
at org.apache.el.parser.AstValue.getValue(AstValue.java:147)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96)
at org.apache.myfaces.view.facelets.tag.TagAttributeImpl.getObject(TagAttributeImpl.java:431)
at org.apache.myfaces.view.facelets.tag.TagAttributeImpl.getBoolean(TagAttributeImpl.java:143)
at org.apache.myfaces.view.facelets.tag.jstl.core.ChooseWhenHandler.isTestTrue(ChooseWhenHandler.java:68)
at org.apache.myfaces.view.facelets.tag.jstl.core.ChooseHandler.apply(ChooseHandler.java:182)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:55)
at org.apache.myfaces.view.facelets.tag.jsf.ComponentTagHandlerDelegate.apply(ComponentTagHandlerDelegate.java:373)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:50)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46)
at org.apache.myfaces.view.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:195)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46)
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:46)
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:520)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:574)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:552)
at org.apache.myfaces.view.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:240)
at org.apache.myfaces.view.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:151)
at org.apache.myfaces.view.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:59)
at org.apache.myfaces.view.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:48)
at org.apache.myfaces.view.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:188)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.buildView(FaceletViewDeclarationLanguage.java:477)
at org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:80)
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)