JBoss 7.2.2 <ui:insert> 属性 'src'、'file' 或 'page' 是必需的

JBoss 7.2.2 <ui:insert> Attribute 'src', 'file' or 'page' is required

我在 JBoss 7.2.2 实例上有一个奇怪的。 Webapp 在 Tomcat 7.x JSF 2.2.

中完美运行

javax.servlet.ServletException: /WEB-INF/template.xhtml @10,38 Attribute 'src', 'file' or 'page' is required

这是 "faulty" 模板 (WEB-INF/template.xhtml)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

    <h:head>
      <title><ui:insert name="title">My Web App</ui:insert></title>

据我所知<ui:insert>只支持name属性 我怀疑命名空间冲突但我一无所知...

这是完整的堆栈跟踪

javax.servlet.ServletException: /WEB-INF/template.xhtml @10,38 <ui:insert> Attribute 'src', 'file' or 'page' is required
     javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
     org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)

JBWEB000071: root cause

javax.faces.view.facelets.FaceletException: /WEB-INF/template.xhtml @10,38 <ui:insert> Attribute 'src', 'file' or 'page' is required
     com.sun.faces.facelets.tag.AbstractTagLibrary$UserComponentHandlerFactory.createHandler(AbstractTagLibrary.java:309)
     com.sun.faces.facelets.tag.AbstractTagLibrary.createTagHandler(AbstractTagLibrary.java:676)
     com.sun.faces.facelets.tag.CompositeTagLibrary.createTagHandler(CompositeTagLibrary.java:184)
     com.sun.faces.facelets.compiler.TagUnit.createFaceletHandler(TagUnit.java:120)
     com.sun.faces.facelets.compiler.TextUnit.createFaceletHandler(TextUnit.java:117)
     com.sun.faces.facelets.compiler.CompilationUnit.getNextFaceletHandler(CompilationUnit.java:115)
     com.sun.faces.facelets.compiler.NamespaceUnit.createFaceletHandler(NamespaceUnit.java:82)
     com.sun.faces.facelets.compiler.CompilationUnit.getNextFaceletHandler(CompilationUnit.java:115)
     com.sun.faces.facelets.compiler.CompilationUnit.createFaceletHandler(CompilationUnit.java:106)
     com.sun.faces.facelets.compiler.CompilationManager.createFaceletHandler(CompilationManager.java:373)
     com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:441)
     com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:403)
     com.sun.faces.facelets.compiler.Compiler.compile(Compiler.java:124)
     com.sun.faces.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:319)
     com.sun.faces.facelets.impl.DefaultFaceletFactory.access0(DefaultFaceletFactory.java:92)
     com.sun.faces.facelets.impl.DefaultFaceletFactory.newInstance(DefaultFaceletFactory.java:159)
     com.sun.faces.facelets.impl.DefaultFaceletFactory.newInstance(DefaultFaceletFactory.java:157)
     com.sun.faces.facelets.impl.DefaultFaceletCache.newInstance(DefaultFaceletCache.java:79)
     com.sun.faces.facelets.impl.DefaultFaceletCache.newInstance(DefaultFaceletCache.java:74)
     com.sun.faces.util.ExpiringConcurrentCache.call(ExpiringConcurrentCache.java:99)
     java.util.concurrent.FutureTask.run(FutureTask.java:262)
     com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
     com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:117)
     com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:58)
     com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:256)
     com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:378)
     com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:358)
     com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
     com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155)
     com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
     com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
     com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:164)
     com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:902)
     com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)
     com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
     com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
     javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
     org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)

感谢 BalusC 的评论,我查看了 JBoss 中的 JSF 模块,很明显 AS 7.2.2 仅随 Mojara 2.1.19 一起提供(不是 2.2.x - of我正在使用许多 facelets 功能)。

所以我关注了 his upgrade howto as well as this one on JBossDeveloper,我的 JBoss 7.2.2 现在支持 JSF 2.2.13。

有了这个,webapp 的工作方式与 Tomcat 中相同的 jar(在 Tomcat 中的 war 的情况下)。