4

私は以下の複合コンポーネントを使用しています:

<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の投稿の1つからid、静的として宣言するとこの問題が修正されることを読みました。しかし、コードで宣言する場所を特定できません。<h:panelGrid>また、私は一種であると仮定できUINamingContainerますか?

4

1 に答える 1

7

はい、それはあなたの複合コンポーネントのIDですが、複合コンポーネントで<h:panelGrid>はありませんUINaminContainer(そうでなければなりません。そうしないと、たとえば同じフォーム内で複数回使用するとIDが重複します)。

なぜ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>
于 2012-12-04T06:59:22.143 に答える