JSF自定义EL函数仅在第一次加载页面时起作用
我创建了一个(基于JSP的)自定义EL函数,用于呈现的标记中。函数将返回一个布尔值,以决定是否需要在页面上呈现页面组件。 我使用将其导入jsp页面 在第一次加载jsp页面时,一切都很完美。单击按钮后,表单将提交,然后我会收到类似“未找到的类加载器:实现EL函数的类”和“未找到函数”的错误。这是怎么回事?什么是修复JSF自定义EL函数仅在第一次加载页面时起作用,jsf,function,jboss,el,Jsf,Function,Jboss,El,我创建了一个(基于JSP的)自定义EL函数,用于呈现的标记中。函数将返回一个布尔值,以决定是否需要在页面上呈现页面组件。 我使用将其导入jsp页面 在第一次加载jsp页面时,一切都很完美。单击按钮后,表单将提交,然后我会收到类似“未找到的类加载器:实现EL函数的类”和“未找到函数”的错误。这是怎么回事?什么是修复 实现该函数的类(com.util.WebContextLoader)作为实用程序类包含在war中 下面是堆栈跟踪 09:22:31,112 ERROR [STDERR] java.l
实现该函数的类(com.util.WebContextLoader)作为实用程序类包含在war中 下面是堆栈跟踪
09:22:31,112 ERROR [STDERR] java.lang.ClassNotFoundException: No ClassLoaders found for: com.util.WebContextLoader
09:22:31,112 ERROR [STDERR] at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
09:22:31,112 ERROR [STDERR] at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
09:22:31,112 ERROR [STDERR] at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
09:22:31,112 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
09:22:31,112 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
09:22:31,112 ERROR [STDERR] at java.lang.Class.forName(Class.java:169)
09:22:31,112 ERROR [STDERR] at org.apache.el.lang.FunctionMapperImpl$Function.getMethod(FunctionMapperImpl.java:147)
09:22:31,112 ERROR [STDERR] at org.apache.el.lang.FunctionMapperImpl.resolveFunction(FunctionMapperImpl.java:53)
09:22:31,112 ERROR [STDERR] at org.apache.el.parser.AstFunction.getValue(AstFunction.java:71)
09:22:31,112 ERROR [STDERR] at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
09:22:31,112 ERROR [STDERR] at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
09:22:31,112 ERROR [STDERR] at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:390)
09:22:31,112 ERROR [STDERR] at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1018)
09:22:31,112 ERROR [STDERR] at javax.faces.component.UIForm.processDecodes(UIForm.java:209)
09:22:31,112 ERROR [STDERR] at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)
09:22:31,112 ERROR [STDERR] at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:540)
09:22:31,112 ERROR [STDERR] at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
09:22:31,112 ERROR [STDERR] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
09:22:31,112 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
09:22:31,112 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
09:22:31,112 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
09:22:31,112 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
09:22:31,112 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
09:22:31,112 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
09:22:31,112 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
09:22:31,112 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
09:22:31,112 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
09:22:31,112 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
09:22:31,112 ERROR [STDERR] at java.lang.Thread.run(Thread.java:619)
09:22:31,112 WARN [lifecycle] org.apache.jasper.el.JspELException: /register.jsp(45,2) '#{g:displayPageComponent('registrationPage', 'regUnit')}' Function 'g:displayPageComponent' not found
javax.faces.FacesException: org.apache.jasper.el.JspELException: /register.jsp(45,2) '#{g:displayPageComponent('registrationPage', 'regUnit')}' Function 'g:displayPageComponent' not found
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:393)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1018)
at javax.faces.component.UIForm.processDecodes(UIForm.java:209)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:540)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.jasper.el.JspELException: /register.jsp(45,2) '#{g:displayPageComponent('registrationPage', 'regUnit')}' Function 'g:displayPageComponent' not found
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:390)
... 34 more
java.lang.ClassNotFoundException:未找到com.util.WebContextLoader的类加载器
函数类显然有一个名为com.util.WebContextLoader
的依赖项,该依赖项在其直接类路径邻域中不可用
这种情况的间歇性发生表明类路径被散布在类路径上的重复类/库所污染,这些类/库是由不同的类加载器加载的。我开始清理类路径。清除
JRE/lib
、JRE/lib/ext
和server/lib
中所有特定于webapp的类/lib 我在这些线程中找到了这个问题的解决方案
解决方案是通过向pom添加以下依赖项,将jasper-el-6.0.18.jar放到war的/web inf/lib文件夹中
org.apache.tomcat
碧玉
6.0.18
此依赖关系还将包括“el-api-6.0.18.jar”(请参阅),我们需要排除它 请编辑问题以包含整个stacktrace。请告诉我函数类的确切位置。请同时注册您的Stackoverflow帐户,这是您的第二个帐户,您已经失去了所有历史和声誉!您的第一个帐户在这里:我将web.xml中的javax.faces.STATE\u SAVING\u方法从客户机更改为服务器,这就解决了我目前的问题。我不确定是否要长期保持该设置(可能会对性能产生影响?)。我将web.xml中的javax.faces.STATE\u SAVING\u方法从客户机更改为服务器,这暂时解决了我的问题。我不确定我是否希望长期保持这种设置(可能会对性能产生一些影响?)。很有趣。它基本上只是将组件树存储在客户端而不是服务器端。组件树仍然需要在服务器端恢复(JSF生命周期的第一阶段)。我看不出这是如何解决类加载问题的。也许在同一时刻还有更多的问题是你意外/无意中解决的。现在它可以工作了,试着将它设置回服务器并重新部署/重新启动,看看它是否仍然可以工作。许多人已经发布了关于EL函数类加载问题的帖子。看起来像是JBoss的问题。