0

I m trying to display an image from a managed bean method which returns byte[] with <o:graphicImage> using omnifaces i deployed omnifaces 2.1 in WEB_INF/lib here is my code

Register.java

public byte[] getImage() throws IOException{
return Utils.toByteArray(Faces.getResourceAsStream("/resources/images/loader.gif"));


        }

Home.xhtml

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:o="http://omnifaces.org/ui">
<h:head>
<h:outputStylesheet library="css" name="style.css"></h:outputStylesheet>
    <style>
.center {
    align: center;
}
</style>

</h:head>
<h:body>
    <h:form>
    <table style="float:right;margin-top:5px;">
        <tr><td><h:commandLink action="/user/second.xhtml" style="float:right;">Second page</h:commandLink></td>
        <td><h:commandLink action="#{login.logout}" style="float:right;">Logout</h:commandLink></td></tr>
</table>        
    </h:form>
    <h:form>
        <div style="margin: auto;">
            <h:messages globalOnly="true" infoStyle="display:none" styleClass="error" style="list-style-type:none;"/>
            <h:messages globalOnly="true"  errorStyle="display:none" styleClass="green" style="list-style-type:none;"/>
            <h4 align="center">Welcome to JSF #{login.username} Dude</h4>

            <h3 align="center">User Profile</h3>
            <h:dataTable value="#{register.getUser(login.username)}" var="info"
                styleClass="center" style="margin:auto;" border="1">
                <h:column>
                <f:facet name="header">Image</f:facet>
                 <o:graphicImage value="#{register.getImage()}" type="jpg" dataURI="true"/>
                </h:column>

                <h:column>
                    <!-- column header -->
                    <f:facet name="header">Email</f:facet>
                    <!-- row record -->
                                        <h:outputText value="#{info.email}"
                                            rendered="#{not  register.edit}" />
<!--                    <h:inputText value="#{info.email}" rendered="#{not register.edit}" /> -->
                </h:column>
                <h:column>
                    <!-- column header -->
                    <f:facet name="header">First Name</f:facet>
                    <!-- row record -->

                                        <h:outputText value="#{info.first}" rendered="#{not  register.edit}" />
<!--                    <h:inputText value="#{info.first}" rendered="#{not register.edit}" /> -->
                </h:column>
                <h:column>
                    <!-- column header -->
                    <f:facet name="header">Last name</f:facet>
                    <!-- row record -->

                                        <h:outputText value="#{info.last}" rendered="#{not  register.edit}" />
<!--                    <h:inputText value="#{info.last}" rendered="#{not register.edit}" /> -->
                </h:column>
                <h:column>
                    <!-- column header -->
                    <f:facet name="header">Phone</f:facet>
                    <!-- row record -->

                                        <h:outputText value="#{info.phone}"
                                            rendered="#{not  register.edit}" />
<!--                    <h:inputText value="#{info.phone}" rendered="#{not register.edit}" /> -->
                </h:column>
                <h:column>
                    <h:commandButton value="Update" action="/user/Updateprofile.xhtml">

                    </h:commandButton>

                </h:column>

            </h:dataTable>
        </div>
    </h:form>


</h:body>
</html>

At first tomcat got started shown this error <o:graphicImage> Tag Library supports namespace: http://omnifaces.org/ui, but no tag was defined for name: graphicImage] when i have added the omnifaces.jar into my build path in eclipse. After the omnifaces.jar in WEB-INF/lib it is not letting the tomcat to start and showing the following error

   java.lang.ExceptionInInitializerError
    at org.omnifaces.application.OmniApplication.<init>(OmniApplication.java:69)
    at org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:89)
    at org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:54)
    at org.apache.myfaces.config.FacesConfigurator.configureApplication(FacesConfigurator.java:1926)
    at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:529)
    at org.apache.myfaces.webapp.AbstractFacesInitializer.buildConfiguration(AbstractFacesInitializer.java:296)
    at org.apache.myfaces.webapp.Jsp21FacesInitializer.initContainerIntegration(Jsp21FacesInitializer.java:73)
    at org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:118)
    at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: CDI API is not available in this environment.
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:88)
    at org.omnifaces.config.BeanManager.<clinit>(BeanManager.java:49)
    ... 18 more
Caused by: java.lang.ClassNotFoundException: javax.enterprise.inject.spi.BeanManager
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:82)
    ... 19 more

Jul 23, 2015 5:16:06 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.omnifaces.ApplicationListener
java.lang.NoClassDefFoundError: Could not initialize class org.omnifaces.config.BeanManager
    at org.omnifaces.ApplicationListener.checkCDIAvailable(ApplicationListener.java:63)
    at org.omnifaces.ApplicationListener.contextInitialized(ApplicationListener.java:55)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Jul 23, 2015 5:16:06 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: One or more listeners failed to start. Full details will be found in the appropriate container log file
Jul 23, 2015 5:16:06 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/First] startup failed due to previous errors
Jul 23, 2015 5:16:06 PM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.NoClassDefFoundError: Could not initialize class org.omnifaces.config.BeanManager
    at org.omnifaces.application.OmniApplication.<init>(OmniApplication.java:69)
    at org.omnifaces.application.OmniApplicationFactory.createOmniApplication(OmniApplicationFactory.java:89)
    at org.omnifaces.application.OmniApplicationFactory.getApplication(OmniApplicationFactory.java:54)
    at org.apache.myfaces.context.servlet.FacesContextImplBase.getApplication(FacesContextImplBase.java:131)
    at org.apache.myfaces.webapp.AbstractFacesInitializer._dispatchApplicationEvent(AbstractFacesInitializer.java:239)
    at org.apache.myfaces.webapp.AbstractFacesInitializer.destroyFaces(AbstractFacesInitializer.java:273)
    at org.apache.myfaces.webapp.StartupServletContextListener.contextDestroyed(StartupServletContextListener.java:153)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:5063)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5723)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

I am using JSF 2.0(Apache Myfaces), and i also have tomahawk 1.1.14 used for uploading the file.

BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452
Jason
  • 127
  • 1
  • 3
  • 17

1 Answers1

4

OmniFaces 2.x requires CDI. See also Download section of OmniFaces homepage:

OmniFaces 2.x

Required: Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0 and CDI 1.1
Optional: BV 1.0

Tomcat as being a barebones JSP/Servlet container doesn't ship with CDI out the box. It's only available in full fledged Java EE containers like WildFly and TomEE. The same applies to JSF (and JSTL), by the way, you'd have to manually install it in Tomcat.

You've 2 options:

  1. Replace Tomcat by TomEE or any other Java EE container.

  2. Manually install CDI in Tomcat.

See also:

Community
  • 1
  • 1
BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452