复合组件和ID

Zil*_*tka 8 jsf composite-component jsf-2

我想在我的JSF复合组件中实现一些javas cript,但我有id的问题.我的java脚本:

document.getElementById("myForm:customerId")
Run Code Online (Sandbox Code Playgroud)

不起作用,因为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>
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

为什么HTML输出中使用"j_idt44"?

Bal*_*usC 13

复合组件是NamingContainer类似的组件,等等.这允许您在同一视图中具有多个组件<h:form>,<h:dataTable>而不会发生冲突的ID.

您还需要为复合组件提供固定ID.例如

<my:composite id="someId" />
Run Code Online (Sandbox Code Playgroud)

我也建议用<div id="#{cc.id}">而不是<div id="element_customer">.然后它将成为someId上述例子.


具体问题无关,这不完全是复合组件的正确目的.复合组件意图是同一种类<h:inputText>,等等.您似乎更喜欢标记文件或包含文件.另请参见何时使用<ui:include>,标记文件,复合组件和/或自定义组件?