我想在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或是否有解决方法?
提前致谢。
答案 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,它正在预测结果。
它有效,但如果有人知道更好的方法 它,我很想知道。