4

我正在使用以下复合组件:

<composite:interface>
    <composite:attribute name="inputId" />
</composite:interface>
<composite:implementation>
    <h:panelGrid id="myTableId">
        <h:inputText id="#{cc.attrs.inputId}" value="..." />
        ...
    </h:panelGrid>
</composite:implementation>

我以如下形式使用它:

<h:form id="myForm">
    <myCompositeComp:test inputId="myInputTextBoxId" />
<h:form>

我已经验证了页面的视图源,这就是它的生成方式:

<table id="myForm:j_idt90:myTableId">
    ...
    <input type="text" id="myForm:j_idt90:myInputTextBoxId" />
</table>

我怎样才能摆脱j_idt90这里?它id是我的复合组件的吗?我从 BalusC 的一篇文章中读到,如果我声明id为静态,这个问题将得到解决。但我无法确定在我的代码中声明它的位置。我也可以假设<h:panelGrid>是一种UINamingContainer

4

1 回答 1

7

是的,它是您的复合组件的 id,<h:panelGrid>不是 aUINaminContainer但复合组件是(它必须是,否则如果您在同一个表单中多次使用它,您将有重复的 ID)。

为什么你需要摆脱身份证?如果可以解决您的问题,您可以自己设置:

<h:form id="myForm">
    <myCompositeComp:test id="myComp" attr1="" attr2="" />
<h:form>

生成的 html 应如下所示:

<table id="myForm:myComp:myTableId">
        ....
        <input type="text" id="myForm:myComp:myInputTextBoxId"
</table>
于 2012-12-04T06:59:22.143 回答