0

バッキングBeanの「deviceSel」に含まれるアイテムの数に応じて、divタグを動的に生成しようとしています。divタグごとに、JSファイルに存在する「generateSparkLine」関数(「Reports_Cap」)を呼び出してデータを入力しています。対応する'div'タグにデータを入力するには、関数のivタグのIDを渡す必要があります。

私の現在のコードでは、divは同じIDで作成されるため、クリックすると同じ部分にデータが入力されます。誰かがJSFファイルからdivタグにIDを動的に割り当てる方法を手伝ってもらえますか?また、divタグでは「onload」イベントを使用できません。これが「onclick」を使用している理由です。ページが開いたときにdivタグが入力されるように変更するにはどうすればよいですか?

<div>
    <ui:repeat var="deviceSel" value="#{reportViewproto.selectedDevices}">
        <h:outputText value="#{deviceSel}" />
        <div id="chartDiv" style="width:600px; height:400px;" onclick="Reports_Cap.generateSparkLine('chartDiv', 'generateSparkLine')"></div>
        <br />
   </ui:repeat>
</div>
4

1 に答える 1

2

いくつかの方法。

JSgenerateSparkLine()関数が制御下にあり、実際にを使用しidてドキュメントから ID で要素を取得している場合は、属性を取り除きid、onclick を次のように置き換えます。

onclick="Reports_Cap.generateSparkLine(this, 'generateSparkLine')"

この方法では、ID は必要ありません。関数の最初の引数として要素が既にあります。


または、それがあなたの管理下にない場合、および/またはIDで要素を取得するためにそれを使用せず、Facelets 2.xを使用している場合は、varStatus属性によるループカウンターを導入し<ui:repeat>、ID値に接尾辞を付けます。

<div>
    <ui:repeat var="deviceSel" value="#{reportViewproto.selectedDevices}" varStatus="loop">
        <h:outputText value="#{deviceSel}" />
        <div id="chartDiv_#{loop.index}" style="width:600px; height:400px;" onclick="Reports_Cap.generateSparkLine('chartDiv_#{loop.index}', 'generateSparkLine')"></div>
        <br />
   </ui:repeat>
</div>

まだ Facelets 1.x を使用している場合、最善の策は同じ方法で属性<c:forEach>をサポートするJSTLvarStatusです。唯一の違いは、ビューのレンダリング時ではなく、ビューのビルド時に実行されるため、別のUIDataコンポーネントで使用します。

于 2011-04-05T18:10:11.310 に答える