Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
874 views
in Technique[技术] by (71.8m points)

jsf - The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>

I went through different sources like:

and it seems to be issue has been fixed in jsf 2.2.1, where as When I tried to use, I am facing issue, below are my configurations:

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>

Page:

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

In Ui I am getting issue like:The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>

even its not calling the <f:viewAction>

Any Suggestion or help will be appreciated.

One thing I noticed during deployment: INFO: Initializing Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) for context /connectWAR

I am not sure why this is telling Mojarra 2.2.0, even though I have upgraded to 2.2.1

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

As to the false UI warning, this is caused by Mojarra issue 2868 and already fixed since 2.2.1.

As to the <f:viewAction> still not working on 2.2.1, another Mojarra bug with the since Java EE 7 introduced xmlns.jcp.org XML namespace domain is causing this trouble. In specifically Mojarra versions 2.2.0 and 2.2.1 the new XML namespace domain is not properly registered for all new JSF 2.2 specific tags which didn't exist in JSF 2.0/2.1, such as <f:viewAction>. In effects, the xmlns.jcp.org will give you in Mojarra 2.2.0/2.2.1 only the JSF 2.1 compatible tags back. This totally explains why the new JSF 2.2 <f:viewAction> didn't work for you.

You have 2 options:

  1. Use the "old" java.sun.com XML namespace domain instead. The new JSF 2.2 specific tags are properly registered there.

  2. Upgrade to at least Mojarra 2.2.2. This peculiar bug is fixed since that version. Mojarra is currently already at 2.2.4.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...