如何使用JSF复合组件在页面上创建唯一ID?

Dre*_*w H 5 javascript composite-component java-ee-6 jsf-2

大家好.我正在为名为flot的javascript图表库创建一个组件.

    <cc:interface>        
    <cc:attribute name="data" required="true" /> 
</cc:interface>

<cc:implementation>       

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <script type="text/javascript"> 
        //<![CDATA[
    $(function () {       

      var d1 = [#{cc.attrs.data}];     

        $.plot($("#placeholder"), [ d1 ]);

    });
    //]]>
    </script>

</cc:implementation>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的少量代码.我遇到的问题是如何在页面上随机生成div标签,以便我可以输出多个图表.显然,在目前的状态下它不会那样做.我需要将值传递给javascript函数.

我知道我可以创建另一个需要id的属性,用户必须指定id,但我注意到很多组件都不需要id.似乎在重要的ajax/javascript库中,如primefaces和icefaces,这些id是随机的.

谢谢你的帮助.

Bal*_*usC 6

您可以通过获取复合组件自己的ID #{cc.id}.所以为了确保唯一性,只需:

<div id="#{cc.id}_placeholder" style="width:600px;height:300px;"></div>
Run Code Online (Sandbox Code Playgroud)

$.plot($("##{cc.id}_placeholder"), [ d1 ]);
Run Code Online (Sandbox Code Playgroud)

如果您未id在组件上指定任何属性,JSF将自动生成一个.例如

<my:plot id="foo">
Run Code Online (Sandbox Code Playgroud)

foo#{cc.id}在复合组件实现中使用.