隐式对象cc和组件之间的jsf差异

arg*_*g20 3 java jsf composite-component jsf-2

也许这是一个愚蠢的问题,但我使用

cc
Run Code Online (Sandbox Code Playgroud)

引用复合组件,例如cc.attrs.randomAttr,但我也看到了

component
Run Code Online (Sandbox Code Playgroud)

隐含的对象,我已经使用它,因为我被告知,但我真的不明白它是什么.有人可以解释一下吗?

Arj*_*jms 9

cc 指评估时正在处理的顶级复合组件.

component 只是正在处理的ui组件.

因此,当在复合组件内部时,cc引用"父"组件,而component当在单个组件上使用时,引用该特定实例.或者对于简单的情况:

cc== component.getCompositeComponentParent(component),其中组件是构建复合组件的组件.

例如,考虑以下复合组件:

<html 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"    
    xmlns:cc="http://java.sun.com/jsf/composite"
>
    <cc:interface/>

    <cc:implementation>

        <h:outputText value="Own ID: #{component.id}, parent composite ID: #{cc.id}" /> <br/>
        <h:outputText value="Own ID: #{component.id}, parent composite ID: #{cc.id}" />

    </cc:implementation>    

</html>
Run Code Online (Sandbox Code Playgroud)

在Facelet上使用它将打印2个不同的"自己的"ID,即两个outputText组件中的ID,而复合ID在两行上都是相同的.

请注意,当涉及多个复合组件嵌套时,事情可能会变得有点复杂.