复合材料组件& ID

时间:2012-04-27 19:52:25

标签: jsf jsf-2 composite-component

我想在我的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”?

1 个答案:

答案 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?