0

我有一个简单的 JSF 2.0 xhtml 页面,当我插入 h:form 标记时它不会呈现。我可以使用普通的标签,一切都很好。

这是我的规格: - Java 1.6 - WebSphere 8.0.0.5 及其内置的 Apache MyFaces 2.0.4 - PrimeFaces 3.4.2 - OmniFaces 1.3 - 我必须支持 HTML 5 标签,所以我正在使用

这是简单的测试页面:

<!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>

我还使用 NetBeans 和 Tomcat 7 测试了这个测试页面,其中 MyFaces 2.0.4 被列为依赖项,PrimeFaces 和 OmniFaces 依赖项从我的 pom 中取出,以确保两者都不会导致问题。该页面仍然不会呈现。

请注意,将 DOCTYPE 更改为典型值:

<?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">

也不工作。

这是错误:

javax.faces.FacesException: java.lang.NullPointerException: org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241) 的 serialFactory 在 org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl .java:156) 在 org.apache.catalina.core 的 javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 的 org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258)。 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) 在 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) 在 org.apache.catalina.valve.AccessLogValve.invoke(AccessLogValve.java:929) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 在 org. java.util.concurrent.ThreadPoolExecutor 上的 apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)。runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) 原因:java.lang.NullPointerException : org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:235) 的 org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:235) 的 serialFactory .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) 在 org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.java:598) 在 javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper) 在 org.apache.myfaces.application.ViewHandlerImpl.writeState(ViewHandlerImpl.java:302) 在 javax.faces.application.StateManager.writeState(StateManager.java:200) .java:65) 在 javax.faces 的 javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper.java:65) 在 org.apache.myfaces.shared_impl.renderkit.html.HtmlFormRendererBase.encodeEnd(HtmlFormRendererBase.java:179) 在 javax.faces。 component.UIComponentBase.encodeEnd(UIComponentBase.java:519) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:626) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:622) 在 javax.faces .component.UIComponent.encodeAll(UIComponent.java:622) 在 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 个59) 在 org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85) 在 org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239) ... 还有 17 个59) 在 org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85) 在 org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239) ... 还有 17 个

我注意到这个问题在 MyFaces 2.0.6 中得到了修复。问题是我被束缚在 WAS v8 的 MyFaces 2.0.4 上。我需要使用 WAS v8 的内置 CDI,所以我可以将它与 EJB 3.1 结合使用。您只能将内置 CDI 与内置 MyFaces 一起使用(在 WAS v8 手册中是这样说的)。

任何解决方法的建议?我可以改用简单的<form>标签吗?<form>使用标签时,我没有看到任何 MyFaces 错误。

4

1 回答 1

0

事实证明,OmniFaces 1.3 是罪魁祸首。BalusC 在OmniFaces 已知问题 wiki 页面上包含了该错误。

真可惜。我正在使用 OmniFaces 为 IE6-8 有条件地加载 html5.js 脚本。看起来我要等到四月才能看到 WAS v8.0.0.6。

于 2013-02-05T21:18:30.650 回答