Jsf 引用复合构件内部的构件(反之亦然)

Jsf 引用复合构件内部的构件(反之亦然),jsf,primefaces,composite-component,Jsf,Primefaces,Composite Component,Primefaces(v5.2)有一两个问题: 在复合组件中引用组件 假设我有一个复合组件,它封装了一个输入字段: myinputfield.xhtml 这也不管用。我尝试了不同的东西,读了不同的答案和文章,却没有找到答案 第二个问题完全相反: 引用复合组件外部的组件 这一次,想象一下相反的情况。我有一个自定义的标签、消息或工具提示: mytooltip.xhtml 这也不起作用。(当然!?) 我不久前遇到了这个问题,通过在复合组件中包含outputText解决了这个问题 但我觉得应该可

Primefaces(v5.2)有一两个问题:

在复合组件中引用组件

假设我有一个复合组件,它封装了一个输入字段:

myinputfield.xhtml

这也不管用。我尝试了不同的东西,读了不同的答案和文章,却没有找到答案


第二个问题完全相反:

引用复合组件外部的组件

这一次,想象一下相反的情况。我有一个自定义的标签、消息或工具提示:

mytooltip.xhtml

这也不起作用。(当然!?)

我不久前遇到了这个问题,通过在复合组件中包含outputText解决了这个问题


但我觉得应该可以管理这两个用户案例。但是怎么做呢

  • 在复合组件中引用组件

    给内部输入一个静态id

    <composite:interface>
        <composite:attribute name="value" />
        ...
    </composite:interface>
    
    <composite:implementation>
        <h:inputText id="input" value="#{cc.attrs.value}" />
    </composite:implementation>
    
    
    ...
    
    与任何命名容器一样引用内部组件:

    <p:inputLabel for="mif:input" value="Your Input:"/>
    <my:myinputputfield id="mif" value=#{controller.inputstring} />
    <p:message for="mif:input" />
    
    
    

  • 引用复合组件外部的组件

    规范的方法是使用完整的客户端id:

    <h:form id="form">
        <h:outputText id="ot" value="Hello World!" />
        <my:mytooltip for=":form:ot" value="since 1974" />
    </h:form>
    
    
    
    但是,由于要将搜索表达式传递给PF组件,因此还可以:

    <h:form>
        <h:outputText id="ot" value="Hello World!" />
        <my:mytooltip for="@form:ot" value="since 1974" />
    </h:form>
    
    
    
    或一般而言:

    <p:tabView>
        <p:tab title="random tab">
            <h:outputText id="ot" value="Hello World!" />
            <my:mytooltip for="@namingcontainer:ot" value="since 1974" />
        </p:tab>
    </p:tabView>
    
    
    
    甚至:

    <h:outputText value="Hello World!" />
    <my:mytooltip for="@composite:@previous" value="since 1974" />
    
    
    
    然而,在这种情况下,一种新的方法可能是更好的方法


  • 顺便说一句,每个问题最好问一个问题。这种情况下的问题是,复合组件总是命名容器。阅读本文中的内容(并检查html源代码以查看其运行情况,检查inputtext的真实客户端id)添加1:引用工作正常,结果证明,我将问题简化了。(这是关于一个参数化的“required”标签,它可以工作,但不会在标签上生成星号。如果我自己不能解决这个问题,我会提出另一个问题。)-补充2:我有时间的时候会研究这个问题。无论如何,这本书可能值得一读。
    <p:inputLabel for="mif:input" value="Your Input:"/>
    <my:myinputputfield id="mif" value=#{controller.inputstring} />
    <p:message for="mif:input" />
    
    <h:form id="form">
        <h:outputText id="ot" value="Hello World!" />
        <my:mytooltip for=":form:ot" value="since 1974" />
    </h:form>
    
    <h:form>
        <h:outputText id="ot" value="Hello World!" />
        <my:mytooltip for="@form:ot" value="since 1974" />
    </h:form>
    
    <p:tabView>
        <p:tab title="random tab">
            <h:outputText id="ot" value="Hello World!" />
            <my:mytooltip for="@namingcontainer:ot" value="since 1974" />
        </p:tab>
    </p:tabView>
    
    <h:outputText value="Hello World!" />
    <my:mytooltip for="@composite:@previous" value="since 1974" />