我使用下面的复合组件:
<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
?
答案 0 :(得分:6)
是的,它是复合组件的id,<h:panelGrid>
不是UINaminContainer
,但复合组件是(必须是,否则如果你在里面多次使用它,你会有重复的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>