我正在编写 ui:composition xhtml 文件以使用 ui:include 包含在不同的页面中。看起来我无法使用 getElementById 在此文件中引用来自 javascript 的标签,因为标签 ID 可能会在父页面的表单 ID 前面添加。有解决方法吗?
在我发布问题后找到了这个答案。它有帮助!
使用 JSF 2.0 在命名容器中获取组件 clientId 的完整前缀
我正在编写 ui:composition xhtml 文件以使用 ui:include 包含在不同的页面中。看起来我无法使用 getElementById 在此文件中引用来自 javascript 的标签,因为标签 ID 可能会在父页面的表单 ID 前面添加。有解决方法吗?
在我发布问题后找到了这个答案。它有帮助!
使用 JSF 2.0 在命名容器中获取组件 clientId 的完整前缀
你可以这样做:
var elem = document.querySelector( '[id$="-test"]' );
其中test
是不带前缀的 ID,-
是前缀分隔符。
上面的代码将选择“id”属性以"-test"
(例如<div id="form1-test">...</div>
)结尾的元素。
现场演示:http: //jsfiddle.net/8kyb2/
请注意,querySelector()
与 attribute-ends-with 选择器配对的执行速度比getElementById()
.
如果您碰巧使用Apache 的 Tomahawk Components并指定forceId="true"
,则标签 ID 将保持不变。例如:
<t:inputText id="name" forceId="true" value="#{myBean.property}" />
将导致<input type="text" id="name" ... / >
.