我经历了不同的来源,例如:

  • Error saying I need to use f:metadata even though I do
  • http://docs.oracle.com/javaee/7/javaserverfaces/2.2/vdldocs/facelets/f/metadata.html

  • 并且似乎问题已在jsf 2.2.1中修复,其中当我尝试使用时,我面临问题,以下是我的配置:

    template.xhtml:
    <!DOCTYPE html>
    <html lang="#{languageBean.language}"
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://xmlns.jcp.org/jsf/core"
        xmlns:h="http://xmlns.jcp.org/jsf/html"
        xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
        xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
        xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
        xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
        xmlns:of="http://omnifaces.org/functions">
    <!-- Enables CTRL+SHIFT+D for activating Facelets debug window -->
    <ui:debug />
    <f:view locale="#{languageBean.language}" encoding="UTF-8" contentType="text/html">
    <!-- Client templates can insert f:metadata here, and this will NOT show up in the showcase page source code -->
    <ui:insert name="meta" />
    
    <c:set var="contextPath" value="${pageContext.request.contextPath}"
        scope="application" />
    <f:loadBundle var="messageResource" basename="MessageResource" />
    <h:head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <meta http-equiv="X-UA-Compatible"
            content="EmulateIE8,IE=edge,chrome=1" />
        <meta http-equiv="pragma" content="no-cache" />
        <meta http-equiv="cache-control" content="no-cache" />
        <meta http-equiv="expires" content="0" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta name="description" content="Connect" />
        <meta name="keywords"
            content="timeline, 3d, css, css3, css-only, transitions, responsive, fluid" />
        <meta name="author" content="FriendsMirror" />
        <link rel="shortcut icon"
            href="#{request.contextPath}/Friendsmirror.ico" />
        <ui:insert name="js"/>
        <h:outputStylesheet library="css" name="common.css" />
        <h:outputStylesheet library="css" name="main.css" />
        <ui:insert name="css"/>
    
        <ui:insert name="onloadScript"/>
        <title><ui:insert name="title">#{messageResource['connect.main.title.main.title']}</ui:insert></title>
    </h:head>
    <h:body>
    <ui:insert name="content" />
    </h:body>
    </f:view>
    </html>
    

    页:
    <ui:composition template="/WEB-INF/templates/discussion_layout.xhtml"
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://xmlns.jcp.org/jsf/core"
        xmlns:h="http://xmlns.jcp.org/jsf/html"
        xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
        xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
    
        <ui:define name="meta">
            <f:metadata>
                <f:viewParam name="sessionKey" value="#{discussionWrapperBean.sessionKey}" />
                <f:viewParam name="ref" value="#{discussionWrapperBean.ref}" />
                <f:viewParam name="pId" value="#{discussionWrapperBean.pId}" />
                <f:viewParam name="dId" value="#{discussionWrapperBean.discussionId}" />
                <f:viewParam name="dName" value="#{discussionWrapperBean.discussionName}" />
                <f:viewAction action="#{discussionWrapperBean.loadInitDiscussion}" onPostback="false" />
            </f:metadata>
        </ui:define>
    
        <ui:define name="title">
            <ui:fragment rendered="#{discussionWrapperBean.profileId != null}">
                #{discussionWrapperBean.userBean.firstName} #{discussionWrapperBean.userBean.lastName != null ? discussionWrapperBean.userBean.lastName: ''}#{discussionWrapperBean.pageTitleNotifications != null ? '(' : ''}#{discussionWrapperBean.pageTitleNotifications != null ? discussionWrapperBean.pageTitleNotifications : ''}#{discussionWrapperBean.pageTitleNotifications != null ? ')' : ''}
            </ui:fragment>
            <ui:fragment rendered="#{discussionWrapperBean.profileId == null}">
                #{messageResource['connect.discussion.title']}
            </ui:fragment>
        </ui:define>
    
        <ui:define name="content">
    
        </ui:define>
    
    </ui:composition>
    

    Maven:
    <jsf.version>2.2.1</jsf.version>
    
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>${jsf.version}</version>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>${jsf.version}</version>
        <scope>provided</scope>
    </dependency>
    

    在Ui中,我遇到了类似的问题:The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>
    甚至没有调用<f:viewAction>
    任何建议或帮助将不胜感激。

    我在部署过程中注意到的一件事:
    信息:为上下文/connectWAR初始化Mojarra 2.2.0(20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930)

    我不确定为什么这会告诉Mojarra 2.2.0,即使我已升级到2.2.1

    最佳答案

    至于虚假的UI警告,这是由Mojarra issue 2868引起的,自2.2.1起已得到解决。

    至于<f:viewAction>仍无法在2.2.1上运行的情况,自Java EE 7引入xmlns.jcp.org XML命名空间域以来,另一个Mojarra错误引起了此麻烦。在特定的Mojarra版本2.2.0和2.2.1中,新的XML namespace 域未针对JSF 2.0/2.1中不存在的所有新的JSF 2.2特定标记正确注册,例如<f:viewAction>。实际上,在Mojarra 2.2.0/2.2.1中,xmlns.jcp.org将为您提供,而仅返回与JSF 2.1兼容的标签。这完全解释了为什么新的JSF 2.2 <f:viewAction>对您不起作用。

    您有2个选择:

  • 改为使用“旧的” java.sun.com XML namespace 域。新的特定于JSF 2.2的标签已在此处正确注册。
  • 至少升级到Mojarra 2.2.2。自该版本以来,该特殊错误已修复。 Mojarra的currently已经是2.2.4。
  • 关于jsf - 元数据组件需要嵌套在f :metadata tag.中建议:将必要的组件包含在<f:metadata>中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17945943/

    10-13 06:52