用于jQuery的JSF复合组件id

时间:2014-11-07 14:42:39

标签: jquery jsf composite-component

我想在jsf中编写一个复合组件,并通过jquery添加一些功能。

小例子: 我的复合组件定义如下所示:

[...]
<t:inputText
    id="#{cc.attrs.id}"
    value="#{cc.attrs.value}"
    required="false"/>

<h:panelGroup rendered="#{cc.attrs.required}">
    <script type="text/javascript">
        jQuery(document.getElementById("#{cc.attrs.id}")).addClass("mandatory")
    </script>
</h:panelGroup>
[...]

并将导致类似这样的事情:

<input name="content_form:name:name" id="content_form:name:name" type="text" value="">
<script type="text/javascript">
    jQuery(document.getElementById("name")).addClass("mandatory")
</script>

正如你所看到的那样,jquery正在获取错误的id。这种情况发生,因为#{cc.attrs.id}的评估似乎发生在不同的点上。

如何获得可预测的ID或是否有解决方法?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我找到了一个&#34;工作解决方案&#34;:

<script type="text/javascript">
    jQuery(document.getElementById("#{cc.clientId}:#{cc.attrs.id}")).addClass("mandatory")
</script>

将使用&#34;真实ID&#34;呈现我的输入元素。

说明:

cc.clientId返回我们所在的复合组件的id,结果:(&#34; content_form:name&#34;)

cc.attrs.id将返回id属性的值,结果:(&#34; name&#34;)

这可以连接到&#34; content_form:name:name&#34;并用作jquery的Id。

我知道这不是&#34;获得id&#34;来自input-tag,它正在预测结果。

它有效,但如果有人知道更好的方法 它,我很想知道。