【发布时间】:2009-08-27 11:17:57
【问题描述】:
默认情况下,JSF 会动态呈现 HTML 字段 id 名称。 ID 名称以 formname:id_some_random_number 格式随机生成。
因此我无法使用 document.getElementById("")。
这个问题有解决办法吗?
【问题讨论】:
标签: javascript jsf
默认情况下,JSF 会动态呈现 HTML 字段 id 名称。 ID 名称以 formname:id_some_random_number 格式随机生成。
因此我无法使用 document.getElementById("")。
这个问题有解决办法吗?
【问题讨论】:
标签: javascript jsf
如果一切都失败了,您可以尝试为元素提供唯一的 css 类,然后通过 getElementsByClassName() 访问它们。或者尝试浏览具有已知 id 的元素的 childNodes()。或者您可以在目标元素 inside 添加一个已知 id 的节点,然后使用 .parentNode :)
【讨论】:
您只需要指定输入的 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/> 也是这种情况。
【讨论】:
您可以使用UIComponent.getClientId 获取生成的ID(JSF 2,如果您可以使用它,添加了一个无参数版本,这使得这对EL 表达式更有用)。有关使用 JSF 组件标识符的提示,请参阅 this blog post(但请注意注意事项)。
【讨论】: