如何使用 JSF 复合组件使页面上的 id 唯一?

Posted

技术标签:

【中文标题】如何使用 JSF 复合组件使页面上的 id 唯一?【英文标题】:How to make an id unique on page with JSF composite components? 【发布时间】:2011-07-23 17:49:23 【问题描述】:

我正在为名为 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>

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

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

【问题讨论】:

【参考方案1】:

您可以通过#cc.id 获取复合组件自己的ID。因此,为了确保唯一性,只需执行以下操作:

<div id="#cc.id_placeholder" style="width:600px;height:300px;"></div>

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

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

<my:plot id="foo">

这里foo 将在复合组件实现中用作#cc.id

【讨论】:

好了。谢谢。我将 id 添加为属性。不知道已经定义了一个。我猜我没有读够。

以上是关于如何使用 JSF 复合组件使页面上的 id 唯一?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 2 中以编程方式或动态创建复合组件

JSF 复合组件 <f:ajax> 包含未知 id - 无法在组件的上下文中找到它

JSF拒绝处理深层嵌套的复合组件。不,真的:“JSF1098:[...]这浪费了处理器时间[...]”

JSF2.0 - 具有可选方法表达式的复合组件

如何对 jsf 复合组件中的集合属性进行 bean 验证,约束不会触发

JSF 2 - 如何将 Ajax 侦听器方法添加到复合组件接口?