我想在我的JSF复合组件中实现一些javas cript,但我有id的问题。我的java脚本:
document.getElementById("myForm:customerId")
不起作用,因为id错误。我有JSF复合组件:
<composite:implementation>
<div id="element_customer">
<h2 class="element_title">Customer</h2>
<h:form id="myForm">
<h:inputText id="customerId" value="#{cc.attrs.customerId}"/>
</h:form>
</div>
</composite:implementation>
和HTML输出是:
<div id="element_customer">
<h2 class="element_title">Customer</h2>
<form id="j_idt44:myForm" name="j_idt44:myForm" method="post" ... >
<input type="hidden" name="j_idt44:myForm" value="j_idt44:myForm" />
<input id="j_idt44:myForm:customerId" ... name="j_idt44:myForm:customerId" />
</form>
</div>
为什么在HTML输出中使用“j_idt44”?
答案 0 :(得分:13)
复合组件是NamingContainer
组件,例如<h:form>
,<h:dataTable>
等。这使您可以在同一视图中拥有多个组件而不会出现ID冲突。
您还需要为复合组件提供固定ID。 E.g。
<my:composite id="someId" />
我还建议使用<div id="#{cc.id}">
代替<div id="element_customer">
。然后使用上面的示例变为someId
。
无关,这不完全是复合组件的正确目的。复合组件的目的是<h:inputText>
等。您似乎更喜欢标记文件或包含文件。另请参阅When to use <ui:include>, tag files, composite components and/or custom components?