Search code examples
htmljsf-2primefacesmyfacesomnifaces

MyFaces 2.0.4 cannot render h:form tag


I have a simple JSF 2.0 xhtml page that will not render when I insert an h:form tag. I can use a normal tag and things render just fine.

Here's my specs: - Java 1.6 - WebSphere 8.0.0.5 & its built-in Apache MyFaces 2.0.4 - PrimeFaces 3.4.2 - OmniFaces 1.3 - I have to support HTML 5 tags, so I'm using

Here's the simple test page:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>This is a test page</title>
</h:head>
<h:body>

    <h:form></h:form>
</h:body>
</html>

I've also tested this test page using NetBeans and Tomcat 7 with MyFaces 2.0.4 listed as a dependency and the PrimeFaces and OmniFaces depencies taken out of my pom to make sure that neither is causing the problem. The page still won't render.

Note that changing the DOCTYPE to the typical:

<?xml version="1.0" encoding="UTF-8"?>

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

is also not working.

Here's the error:

javax.faces.FacesException: java.lang.NullPointerException: serialFactory at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241) at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.NullPointerException: serialFactory at org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:268) at org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:235) at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeViewStateField(HtmlResponseStateManager.java:120) at org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateManager.java:111) at javax.faces.render.ResponseStateManager.writeState(ResponseStateManager.java:67) at org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.java:598) at javax.faces.application.StateManager.writeState(StateManager.java:200) at org.apache.myfaces.application.ViewHandlerImpl.writeState(ViewHandlerImpl.java:302) at javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper.java:65) at javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper.java:65) at org.apache.myfaces.shared_impl.renderkit.html.HtmlFormRendererBase.encodeEnd(HtmlFormRendererBase.java:179) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:519) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:626) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622) at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1320) at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239) ... 17 more

I've noticed that the problem was fixed in MyFaces 2.0.6. The problem is that I'm tethered to WAS v8's MyFaces 2.0.4. I need to use WAS v8's built-in CDI, so I can combine it with EJB 3.1. You can only use the built-in CDI with the built-in MyFaces (it says so in the WAS v8 manual).

Any suggestions for a workaround? Can I use a simple <form> tag instead? I don't see any MyFaces errors when I use the <form> tag.


Solution

  • It turns out that OmniFaces 1.3 was the culprit. BalusC has included that error on the OmniFaces known issues wiki page.

    That's a shame. I was using OmniFaces for conditional loading of html5.js scripts for IE6-8. Looks like I'll be waiting until April for WAS v8.0.0.6.