默认情况下,JSF动态呈现HTML字段ID名称。 ID名称以formname:id_some_random_number。
的格式随机生成因此我无法使用document.getElementById(“”)。
这个问题有解决办法吗?
答案 0 :(得分:2)
您只需指定输入的ID即可。 但请注意,ID将以包含输入字段的表单的ID为前缀。
例如:
<h:form id="myForm">
...
<h:inputText id="myInput" .../>
inputText的真实ID是 myForm:myInput 。
因此,这个Javascript代码将起作用:
var obj = document.getElementById("myForm:myInput");
<小时/> 修改(用于精确度)
更确切地说,如果组件在Java中实现NamingContainer接口,则所有嵌套组件的ID都将以此组件的ID为前缀。这是<h:form/>
组件的情况,也适用于<h:datatable/>
。
答案 1 :(得分:2)
如果所有其他方法都失败了,您可以尝试为元素提供唯一的css类,然后通过getElementsByClassName()访问它们。或者尝试浏览具有已知id的元素的childNodes()。或者,您可以在目标元素中添加已知id 的节点,然后使用.parentNode:)
答案 2 :(得分:1)
您可以使用UIComponent.getClientId获取生成的ID(JSF 2,如果您可以使用它,添加一个使用EL表达式更有用的无参数版本)。有关使用JSF组件标识符的提示,请参阅this blog post。(请注意警告)。