Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 如何在包含相同的XHTML JSF 2.0文件时避免名称空间冲突_Jakarta Ee_Jsf 2_Facelets - Fatal编程技术网

Jakarta ee 如何在包含相同的XHTML JSF 2.0文件时避免名称空间冲突

Jakarta ee 如何在包含相同的XHTML JSF 2.0文件时避免名称空间冲突,jakarta-ee,jsf-2,facelets,Jakarta Ee,Jsf 2,Facelets,在我的JSF2.0项目中,当我在一个单亲XHTML文件中包含两个相同的XHTML文件时,会出现名称空间冲突。我的目标是在单个页面上创建一个由相同控件组成的仪表板,每个控件代表一个单独的上下文 例如,在以下名为parent.xhtml(比如)的JSF文件中,我包括两个“dashboard”facelet: <ui:define name="body"> <p:panel id="ONE" > <ui:include src="raceboar

在我的JSF2.0项目中,当我在一个单亲XHTML文件中包含两个相同的XHTML文件时,会出现名称空间冲突。我的目标是在单个页面上创建一个由相同控件组成的仪表板,每个控件代表一个单独的上下文

例如,在以下名为
parent.xhtml
(比如)的JSF文件中,我包括两个“dashboard”facelet:

<ui:define name="body">
    <p:panel id="ONE"  >
        <ui:include src="raceboardunit.xhtml"/>
    </p:panel>

    <p:panel id="TWO" >
        <ui:include src="raceboardunit.xhtml"/>
    </p:panel>
</ui:define>

简单地说,假设子facelet“raceboardunit.xhtml”如下所示:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core" 
            xmlns:p="http://primefaces.prime.com.tr/ui">

    <p:panel header="Dashboard" >
        <h:panelGrid columns="2">
            <h:outputLabel value="Event" for="idEvent}" />
            <h:outputLabel value="#raceBoardController.name}" id="idEvent" />
        </h:panelGrid>
    </p:panel>
</ui:composition>

问题在于涉及输出标签的冲突,因为在父.xhtml文件中,子facelet的两个内含物具有相同的命名组件

错误报告为:
视图中已找到组件ID idEvent。


错误的原因是显而易见的,但是在JSF2.0应用程序中包含数量可变的相同组件以最大限度地提高代码重用的最佳方法是什么呢?

最简单但最丑陋的方法是将其包装在一个基本上引入了新层的框架中


更好的方法是将其改为标记文件或复合组件

下面是一个示例,演示了它作为标记文件的外观:


在标记文件中使用


(我认为你过于简化了问题中的示例,以至于它没有意义;一个标签引用了另一个标签?因此我也对它进行了修改,使其具有一定的意义。)

复合组件的用法基本上与标记文件相同,但其本身已隐式地成为
UINamingContainer
,因此不需要在复合组件实现中手动为ID添加前缀


另见:

谢谢@BalusC。这对我来说很重要。顺便说一句,我的标签引用的标签示例在我的应用程序的上下文中是有意义的,但你是对的-我应该更好地将其用于这里的目的。