如何使用f:metadata JSF标签?

时间:2014-02-15 20:38:22

标签: jsf metadata

我有一个包含在另一个视图中的视图。我在包含的视图中遇到了f:metadata的问题。不确定如何去做。我已经更新了两个视图并重新启动了服务器。没运气。

家长视图

<ui:include src="sub_entityIndexPagination.xhtml">
    <ui:param name="entityIndexBean" value="#{articleIndexBean}"/>
</ui:include>

子视图

<ui:composition 
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:c="http://java.sun.com/jsp/jstl/core"      
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  >

<f:metadata>
    <f:viewParam name="pn" value="#{entityIndexBean.currentEntityPageNumber}" />
     <f:event type="preRenderView" listener="#{entityIndexBean.toCurrentEntityPage()}" />
</f:metadata>

<c:forEach var="pageNumber" begin="1" end="${entityIndexBean.getEntityPageCount()}">   
    <h:outputLink value="ar_index.xhtml">
        <h:outputText value="${pageNumber}" />
            <f:param name="pn" value="${pageNumber}" />
    </h:outputLink> 
</c:forEach>

JSF实施

c:\tomee16\lib\myfaces-api-2.1.13.jar

错误

/sub_entityIndexPagination.xhtml at line 9 and column 14 <f:metadata> Parent UIComponent j_id_9 should be instance of UIViewRoot

phaseId=RENDER_RESPONSE(6)

Caused by:
javax.faces.view.facelets.TagException - /sub_entityIndexPagination.xhtml at line 9 and column 14 <f:metadata> Parent UIComponent j_id_9 should be instance of UIViewRoot
at org.apache.myfaces.view.facelets.tag.jsf.core.ViewMetadataHandler.apply(ViewMetadataHandler.java:60)

2 个答案:

答案 0 :(得分:4)

无法在包含文件中声明<f:metadata>。它必须在顶视图(您指定为“父视图”的文件)中声明。它应该是请求URL直接引用的视图。

也就是说,在包含文件中包含<html>是完全错误的。您就是这样有效地嵌套<html>标记,这只会导致syntactically invalid HTML。将JSF暂停并学习some basic HTML first可能是值得的。 JSF最终只是一个HTML代码生成器。

答案 1 :(得分:3)

这可能会出现的另一个原因是,是否有任何标记,包括:facelets中<ui:composition><f:metadata>之间的标记。

e.g:

好:

<ui:composition 
...
template="..."> 
<f:metadata>
    <f:viewParam ...

也好,如果你需要在f:view:

上设置params
<ui:composition 
...
template="..."> 
<f:view ...params goes here... /> <!-- ends here, does not enclose anything -->
<f:metadata>
    <f:viewParam ...

坏:

<ui:composition 
...
template="...">
<f:view>  <!-- you don't even need this with facelets unless you want to pass in parameters. --> 
<f:metadata>
    <f:viewParam ...
</f:view> <!--f:view encloses f:metadata so f:metadata is no longer a direct  child of UIViewRoot. -->

Jakob Korherr的完整解释见:https://mail-archives.apache.org/mod_mbox/myfaces-users/201104.mbox/%3cBANLkTikT41optf6=ZLpPQgWCJjGhkuAYsQ@mail.gmail.com%3e