Primefaces,JavaScript和JSF不能很好地协同工作,或者我做错了什么
这是如此简单的事情
当您单击Tom时,文本框将获得焦点。 很好,现在尝试这个
当我点击什么都没发生时,我查看了萤火虫,我明白了
document.getElementById("tom") is null
当我尝试使用jQuery $('#tom').focus()
,没有任何事情发生,没有错误,但也没有得到焦点。 当我从firebug看到时,这是response
(不确定这是否是来自服务器的响应)
{"validationFailed":false}
在JSF中,元素的ID以包含它们的表单的ID为前缀(更一般地,它们的ID以实现NamingContainer
接口的所有父组件的ID为前缀)。 例如:
将生成以下HTML代码:
要访问您必须使用
myForm:tom
ID而不是tom
ID本身。
使用jQuery,你将不得不使用$("myForm\:tom").focus();
JSF将使用UINamingContainer
组件本身的ID来预先添加UINamingContainer
子项的ID( h:form
, h:dataTable
等)。 您可以通过将prependId
属性设置为false
来禁用此function。
您将无法再在同一视图中的其他位置动态包含相同的代码片段。 禁用此function时请记住这一点。
使用Primefaces2,你应该使用jQuery而不是$,如下所示:
...
您需要为该JSF标记赋予id
属性,如下所示:
否则它将不会使用id
渲染,因此找不到id="tom"
元素。
不要忘记,primefaces也让你使用属性widgetvar将你的组件绑定到一个javascript对象。
例如:
然后在你的javascript代码或一些javascript回调你可以做:
tom.disable()
等等