2012-12-04 44 views
2

我使用下面的复合材料部件:如何摆脱自动生成j_idt ID在复合材料部件

<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

回答

6

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

为什么你需要摆脱ID?

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

的genereated HTML应该是这样的:

<table id="myForm:myComp:myTableId"> 
     .... 
     <input type="text" id="myForm:myComp:myInputTextBoxId" 
</table> 
+0

非常感谢您能是否能解决你的问题你自己设置。它正在工作。我的印象是,复合组件本身没有ID。 – MyFist