【问题标题】:MyFaces 2.0.4 cannot render h:form tagMyFaces 2.0.4 无法呈现 h:form 标签
【发布时间】:2013-02-01 21:10:08
【问题描述】:

我有一个简单的 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:serialFactory 在 org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap(ExceptionHandlerImpl.java:241) 在 org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:156) 在 org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:258) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在 org.apache.catalina.valves.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.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:722) 引起:java.lang.NullPointerException:serialFactory 在 org.apache.myfaces.shared_impl.util.StateUtils.getAsByteArray(StateUtils.java:268) 在 org.apache.myfaces.shared_impl.util.StateUtils.construct(StateUtils.java:235) 在 org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeViewStateField(HtmlResponseStateManager.java:120) 在 org.apache.myfaces.renderkit.html.HtmlResponseStateManager.writeState(HtmlResponseStateManager.java:111) 在 javax.faces.render.ResponseStateManager.writeState(ResponseStateManager.java:67) 在 org.apache.myfaces.application.jsp.JspStateManagerImpl.writeState(JspStateManagerImpl.java:598) 在 javax.faces.application.StateManager.writeState(StateManager.java:200) 在 org.apache.myfaces.application.ViewHandlerImpl.writeState(ViewHandlerImpl.java:302) 在 javax.faces.application.ViewHandlerWrapper.writeState(ViewHandlerWrapper.java:65) 在 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) 在 org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263) 在 javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) 在 javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java: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 手册中这样说)。

对解决方法有什么建议吗?我可以改用简单的&lt;form&gt; 标签吗?当我使用 &lt;form&gt; 标签时,我没有看到任何 MyFaces 错误。

【问题讨论】:

  • 请使用更新版本的 MyFaces。最新版本(2.0.16/2.1.11)被认为是迄今为止最稳定的版本。
  • 2.1 应该会更好。 2.1.10 可以在 maven repo 中找到
  • 好吧,如果我真的可以使用最新的 2.0/2.1 版本的 MyFaces,我会的。哎呀,我使用 Mojarra 的 JSf 2.2 作为应用程序的 POC。虽然我不能升级。我坚持使用 WebSphere v8.0.5。如果我想利用 JEE 6 的 CDI,你必须使用 WAS 8 的内置 MyFaces 2.0.4。是的,我可以通过将类加载器策略设置为 PARENT_LAST 或共享库来覆盖 2.0.4,但是我失去了能够使用 CDI 的好处。在 WAS v8 中,这是他们的 CDI 实现,或者什么都没有。你不能覆盖它。我没有使用没有 CDI 的 JSF 2.0 与 EJB 3.1 和 JPA 2 结合使用。
  • 更正,我使用的是 WAS v8.0.0.5。我还想补充一点,添加常规的&lt;form&gt; 标签不是合适的解决方法。虽然编译器不会抱怨该标签的存在,但 JSF 将在运行时呈现一条警告消息,说明需要 JSF 表单。我正在尝试找出解决此问题的方法。一个救恩是 WAS v8.0.0.6 在 4 月发布,尽管在当前时间点这对我没有好处。
  • 呃,到目前为止,我所做的一切都没有奏效。我偶然发现了这篇文章:link 和这篇文章:link。在将我的 javax.faces.STATE_SAVING_METHOD 从服务器设置为客户端后,我尝试实现 MyFaces wiki 中指定的代码。我添加了 jboss-serialization 和 trove 依赖项和类。然后我添加了 web.xml 上下文参数 org.apache.myfaces.SERIAL_FACTORY 并将其设置为 JBossSerialFactory(位于我的包结构中)。没有运气

标签: html jsf-2 primefaces myfaces omnifaces


【解决方案1】:

事实证明 OmniFaces 1.3 是罪魁祸首。 BalusC 在OmniFaces known issues wiki page 中包含了该错误。

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

【讨论】:

  • 你不能在 webapp 的 /WEB-INF/lib 中捆绑 JSF 并将 WAS 类加载策略设置为“模块”或“PARENT_LAST”(取决于 WAS 版本)吗?
  • 是的,我可以这样做(我在 WAS v6.1 中这样做),但需要注意的是我失去了使用 WAS 8 的 CDI 的能力。
  • 不习惯点击 Enter 按钮时提交的 cmets...Link 1 - “只有默认的 JSF 实现(基于 MyFaces)支持与 CDI 一起使用。” Link 2 - 查看底部的“避免麻烦”简介。
  • Link 3 Link 4 真可惜。无论如何,很高兴见到你,顺便说一句,多年来阅读了你这么多的帖子、编辑和 cmets。感谢 OmniFaces!
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多