9

我想在我的 JSF 复合组件中实现一些 javas 脚本,但是我的 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”?

4

1 回答 1

15

复合组件是,等NamingContainer组件。这允许您在同一个视图中拥有多个组件,而不会出现 ID 冲突。<h:form><h:dataTable>

您还需要给复合组件一个固定的 ID。例如

<my:composite id="someId" />

我还建议使用<div id="#{cc.id}">而不是<div id="element_customer">. 然后它会变成someId上面的例子。


与具体问题无关,这并不完全是复合组件的正确目的。复合组件的意图是与<h:inputText>等相同。您似乎更想要一个标记文件或者可能是一个包含文件。另请参阅何时使用 <ui:include>、标记文件、复合组件和/或自定义组件?

于 2012-04-27T20:00:08.820 回答