元数据组件需要嵌套在 f:metadata 标记中。建议:将必要的组件包含在 <f:metadata> 中
Posted
技术标签:
【中文标题】元数据组件需要嵌套在 f:metadata 标记中。建议:将必要的组件包含在 <f:metadata> 中【英文标题】:The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata> 【发布时间】:2013-07-30 12:51:57 【问题描述】:我浏览了不同的来源,例如:
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 中修复,当我尝试使用时,我遇到了问题,以下是我的配置:
模板.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>
马文:
<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>
任何建议或帮助将不胜感激。
我在部署过程中注意到的一件事:
信息:初始化 Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) 以获取上下文 /connectWAR
我不确定为什么这告诉 Mojarra 2.2.0,即使我已经升级到 2.2.1
【问题讨论】:
在我发布答案时,报告的修复是针对 2.2.1,但是当我查看链接时,问题仍然存在,现在报告的修复是针对 2.2.2。我仍然不时遇到 JSF 2.2.1 的这个问题,所以你并不孤单。如果该消息让您非常困扰,请更改项目阶段。至于f:viewAction
,从那以后我就没试过了。我会再试一次。
谢谢安迪...可以忽略警告消息,但不能使用 f:viewActions
并进行了一些测试。使用 JSF 2.2.1,我能够让它在更小的样本上工作。我也没有看到警告信息。所以也许你的项目没有指向最新的 JSF 版本,但我不是解决这个问题的专家。这是我推荐的一个链接***.com/questions/4441713/…
【参考方案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 命名空间域没有为 JSF 2.0/2.1 中不存在的所有新的 JSF 2.2 特定标签正确注册,例如 <f:viewAction>
。实际上,xmlns.jcp.org
将在 Mojarra 2.2.0/2.2.1 中仅返回与 JSF 2.1 兼容的标签。这完全解释了为什么新的 JSF 2.2 <f:viewAction>
不适合您。
你有两个选择:
改用“旧”java.sun.com
XML 命名空间域。新的 JSF 2.2 特定标签已在此处正确注册。
至少升级到 Mojarra 2.2.2。自该版本以来,此特殊错误已修复。 Mojarra 是 currently 已经是 2.2.4。
【讨论】:
以上是关于元数据组件需要嵌套在 f:metadata 标记中。建议:将必要的组件包含在 <f:metadata> 中的主要内容,如果未能解决你的问题,请参考以下文章