我有一个包含在另一个视图中的视图。我在包含的视图中遇到了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)
答案 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