当前位置: 首页 > 知识库问答 >
问题:

Wildfly 8 final-weld-core-jsf上的JSF 1.2仍然引用JSF 2.2 API

弘阳德
2023-03-14

我做了什么:

  • 我在这里学习了multi-jsf特性教程,并将JSF 1.2作为wildfly的一个模块安装(确切地说,是3个模块)。
  • 接下来,我为javax.faces.api和com.sun.jsf-impl(主槽)添加了排除项,并为war添加了与jboss-deployment-structure.xml的1.2槽的相应依赖项。
  • 由于应用程序使用的是Tomahawk和Tomahawk Sandbox,我也在用ear进行部署,因此我还排除了主插槽,并将两个模块的1.2插槽包含在这些部署中。

我的问题:

    null
ERROR [request] UT005023: Exception handling request to /backoffice/login.faces: java.lang.NoSuchMethodError: javax.faces.context.FacesContext.getAttributes()Ljava/util/Map;
     [exec]     at org.jboss.weld.jsf.ConversationAwareViewHandler.getActionURL(ConversationAwareViewHandler.java:103)
     [exec]     at javax.faces.application.ViewHandlerWrapper.getActionURL(ViewHandlerWrapper.java:147)
     [exec]     at com.sun.facelets.FaceletViewHandler.getActionURL(FaceletViewHandler.java:807)
     [exec]     at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer.getActionUrl(HtmlRenderer.java:77)
     [exec]     at org.apache.myfaces.custom.form.HtmlFormRenderer.getActionUrl(HtmlFormRenderer.java:45)
     [exec]     at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlFormRendererBase.encodeBegin(HtmlFormRendererBase.java:102)
     [exec]     at org.apache.myfaces.custom.form.HtmlFormRenderer.encodeBegin(HtmlFormRenderer.java:134)
     [exec]     at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:816)
     [exec]     at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
     [exec]     at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
     [exec]     at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:594)
     [exec]     at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
     [exec]     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
     [exec]     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
     [exec]     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
     [exec]     at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)
     [exec]     at com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.custom.conversation.ConversationServletFilter.doFilter(ConversationServletFilter.java:78)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.custom.requestParameterProvider.RequestParameterServletFilter.doFilter(RequestParameterServletFilter.java:66)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.indra.backoffice.webapp.AvoidCachingFilter.doFilter(AvoidCachingFilter.java:53)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.logging.BaseFilter.doFilter(BaseFilter.java:44)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.logging.NDCFilter.doFilter(NDCFilter.java:50)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
     [exec]     at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
     [exec]     at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
     [exec]     at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)
     [exec]     at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52)
     [exec]     at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
     [exec]     at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)
     [exec]     at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
     [exec]     at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
     [exec]     at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168)
     [exec]     at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:687)
     [exec]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
     [exec]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
     [exec]     at java.lang.Thread.run(Thread.java:744)
<sub-deployment name="myfaces-tomahawk-core.jar">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>
<sub-deployment name="myfaces-tomahawk-sandbox.jar">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.collections" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>
<sub-deployment name="backoffice.war">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="net.sourceforge.jamonapi" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.codec" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>

我还能做什么呢?

共有1个答案

傅志用
2023-03-14

简单地说,这个问题是由weld和JSF1.2的不兼容性引起的,在以后的发行版中不会修复(请参见这里)。

在我看来,一个人可以走三条路:

  1. 升级应用程序代码以使用JSF 2.x。
  2. 在必要时排除weld子系统(可能需要重新配置wildfly的默认CDI设置)。
  3. 适当地修补ConversationawareViewHandler类,以便在使用旧的JSF API时执行不同的操作。
 类似资料:
  • 问题内容: 我目前正在将JSF-1.2应用程序迁移到Wildfly 8 Final,并被卡住了:( 首先,我已经阅读了很多有关问题的文章(例如https://community.jboss.org/message/845006或将JSF 1.2 Seam应用程序迁移到WildFly Beta 1 ),但是建议的解决方案(不包括焊接子系统)没有不为我工作。 我做了什么: 我在这里遵循了multi-j

  • 我仍然被那些为了支持移动和转发而发明的规则弄糊涂了。有一件事我还不太确定: 转发引用是否只是rvalue引用(应用了引用折叠规则)? 如果它是一个rvalue引用,那么为什么函数: 不仅接受rvalues,还接受lvalues?

  • 在本章中,我们将讨论如何在.NET Core应用程序中添加包以及如何查找特定的包。 我们可以直接去NuGet并添加包,但是在这里可以从其他一些地方查找加入。 现在让我们来看看位于下面链接的.NET Core的源代码 - http://github.com/dotnet/corefx 在CoreFx repo中,打开文件夹 - 会看到对应于不同包的文件夹的整个列表。现在搜索 - 还有另外一种方法可以

  • Mojarra JSF 2.2.10 应用程序的web.xml包含以下监听器: 第一个侦听器向JNDI注册BeanManager。第二个侦听器初始化JSF并在JNDI中查找BeanManager。 更新: NPE发生在会话失效时;由于JSF中没有注册BeanManager,因此无法销毁视域bean。请参见下面的堆栈跟踪: 由:java.lang.nullpointerException在com.s

  • 问题内容: “有效的Go”文档说明以下内容。 关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法。 http://tip.golang.org/doc/effective_go.html#pointers_vs_values 这样,如果我定义如下所示的方法,那么使用值不能调用它吗? 但是,以下似乎仍然有效。 为什么? 是否将值转换回调用的地址/指针? 如何确保某

  • 问题内容: 如何在WildFly上完全禁用WELD。我不需要它,因为我使用了另一个DI框架。 异常0:javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符[@ javax.enterprise.inject.Any(),@ javax.enterprise.inject来解析’org.springframework.data.