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:formh:dataTable等)。 您可以通过将prependId属性设置为false来禁用此function。

  

您将无法再在同一视图中的其他位置动态包含相同的代码片段。 禁用此function时请记住这一点。

使用Primefaces2,你应该使用jQuery而不是$,如下所示:

     ...  

您需要为该JSF标记赋予id属性,如下所示:

  

否则它将不会使用id渲染,因此找不到id="tom"元素。

不要忘记,primefaces也让你使用属性widgetvar将你的组件绑定到一个javascript对象。

例如:

  

然后在你的javascript代码或一些javascript回调你可以做:

 tom.disable() 

等等