【问题标题】:Primefaces + MyFaces + CDI (OpenWebBeans) + WAS 8.5Primefaces + MyFaces + CDI (OpenWebBeans) + WAS 8.5
【发布时间】:2014-03-28 23:19:02
【问题描述】:

早安,

现在我正在尝试将我当前工作的应用程序(Primefaces+EJB+JPA + Glassfish 4.0)迁移到 WAS 8.5。我尝试使用 mojarra 来使 Primefaces 工作。我以为我已经成功了,但后来我在启动期间 WAS 的 SystemOut.log 中的一个事件报告中偶然发现了这个异常:

FFDC 异常:java.lang.IllegalStateException SourceId:com.ibm.ws.webbeans.services.JCDIWebListener.contextInitialized() ProbeId:104 报告者:com.ibm.ws.webbeans.services.JCDIWebListener@fa0f39fa java.lang.IllegalStateException:与 JCDI 一起使用的不受支持的 JSF 实现

当我尝试按下调用 #{navigationBean.login} 的按钮时,我得到了这个异常:

javax.el.PropertyNotFoundException: /login.xhtml @45,111 action="#{navigationBean.login}": Target Unreachable, identifier 'navigationBean' resolved to null

进一步的研究表明(如果我错了,请纠正我)WAS (Apache OpenWebBeans) 的 CDI 实现在 MyFaces JSF 实现中效果最好(或仅适用?)。所以我怀疑这是因为我使用了 Mojarra 而不是 MyFaces。所以我继续尝试尝试替换 OpenWebBeans,结果发现我无法将其更改为 Weld CDI 实现(这是 Glassfish 使用的)。

关于我应该如何解决这个问题的任何建议?我真的很想能够在 websphere 中使用 primefaces。

更新: 更新:我能够显示我的第一页(使用 primeface+MyFaces 的登录页面)。但是当我单击带有指向@Named 类 NavigationBean 的 EL 表达式 (#{navigationBean.login}) 的第一个元素时,我仍然得到 ​​p>

javax.el.PropertyNotFoundException: /login.xhtml @45,111 action="#{navigationBean.login}": Target Unreachable, identifier 'navigationBean' resolved to null

此外,我还看到了这个异常跟踪:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause Faces Servlet: javax.servlet.ServletException: WebBeans context with scope type annotation @RequestScoped does not exist within current thread
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:221)
   at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1227)
   at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776)
   at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458)
   at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
   at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
   at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79)
   at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928)
   at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025)
   at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1385)
   at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:194)
   at com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:3263)
   at com.ibm.ws.webcontainer.webapp.WebApp.handleException(WebApp.java:3791)
   at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3772)
   at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
   at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:976)
   at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
   at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
   at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
   at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
   at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
   at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
   at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
   at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
   at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
   at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
   at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
   at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
   at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
   at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862)

通过进一步研究,我的假设是:(你们都可以纠正以引导我走上正确的道路) - Websphere 中的 Primefaces + MyFaces 运行良好。但是,如果我想实现依赖注入,我将不得不求助于使用 @ManagedBean 而不是 @Named CDI 实现(到目前为止更好)

但是,如果有人知道如何使 @Named 仍然可以与 primefaces 一起使用,您能否告诉我如何或至少将我指向您知道可以提供帮助的资源。

非常感谢。

【问题讨论】:

    标签: java primefaces websphere myfaces mojarra


    【解决方案1】:

    我已经解决了我自己的问题。 Primefaces 与

    配合得很好

    MyFaces2.0+CDI(OpenWebbeans)+WAS8.5

    我所做的是将所有必要的 Primefaces 依赖文件包含在我的 bin 文件夹中,并在我的 web.xml 中进行一些调整,然后它就可以正常工作了。 :)

    这是我的 web.xml 的一部分:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <display-name>ISIP_DCE</display-name>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
            <enabled>true</enabled>
            <async-supported>false</async-supported>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>
            *.xhtml</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.xhtml</welcome-file>
        </welcome-file-list>
        <context-param>
            <description> 
            </description>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>server</param-value>
        </context-param>
        <context-param>
            <description>
            </description>
            <param-name>javax.faces.CONFIG_FILES</param-name>
            <param-value/>
        </context-param>
        <context-param>
            <description>
            </description>
            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            <param-value>.xhtml</param-value>
        </context-param>
        <context-param>
            <description>
            </description>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Production</param-value>
        </context-param>
        <context-param>
            <description>
            </description>
            <param-name>com.ibm.ws.jsf.JSP_UPDATE_CHECK</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <description>
            </description>
            <param-name>com.ibm.ws.jsf.LOAD_FACES_CONFIG_AT_STARTUP</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>
                javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
            </param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>primefaces.TRANSFORM_METADATA</param-name>
            <param-value>true</param-value>
        </context-param>
        <filter>
            <filter-name>Primefaces FileUpload Filter</filter-name>
            <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
            <init-param>
                <param-name>thresholdSize</param-name>
                <param-value>51200</param-value>
            </init-param>
        </filter>
        <context-param>
            <param-name>primefaces.TRANSFORM_METADATA</param-name>
            <param-value>true</param-value>
        </context-param>
        <filter-mapping>
            <filter-name>Primefaces FileUpload Filter</filter-name>
            <servlet-name>Faces Servlet</servlet-name>
        </filter-mapping> 
        <context-param>
            <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <description>Workaround for the bug reported for JSF 2.0.
    (source: http://stackoverflow.com/questions/8026082/jsf-2-0-why-my-viewscope-beans-is-re-created-even-though-still-on-same-view)</description>
            <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
            <param-value>false</param-value>
        </context-param>
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    </web-app>
    

    【讨论】:

    • 嗨@Anatoly 很抱歉很晚才回复。好久没看这个帖子了。我不知道它是否仍然相关,但我刚刚更新了我的帖子。谢谢
    • 我真的不记得我为什么要问了。无论如何,谢谢你的回复,我相信你的回答会对其他人有所帮助,或者以后可能对我有所帮助。
    • 这是因为 WebSphere 有它自己的 JSF 实现。如果你想使用你自己的类加载器,你需要反转你的类加载器。这可能会导致服务器上的应用程序类加载器出现其他问题。我正在使用 JSF 2.2.11 (MyFaces) CDI 和 OpenWebBeans 运行 Was 8.5
    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 2011-12-23
    • 2019-05-17
    • 2012-06-09
    • 2011-11-11
    • 2013-04-23
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多