1

这是非常简单的事情

<p:commandLink value="Tom" onclick="document.getElementById('tom').focus()"/><br/>
<input id="tom"/>

当你点击汤姆时,文本框获得焦点。太好了,现在试试这个

<p:commandLink value="Tom" onclick="document.getElementById('tom').focus()"/><br/>
<h:inputText id="tom"/> <br/>

当我点击什么都没有发生时,我检查了萤火虫,我看到了

document.getElementById("tom") is null

当我尝试使用 jQuery$('#tom').focus()时,什么也没有发生,没有错误,但也没有得到焦点。当我从萤火虫看到时,这是response(不确定这是否是服务器的响应)

<?xml version="1.0" encoding="utf-8"?>
<partial-response>
    <changes>
       <update id="javax.faces.ViewState"><![CDATA[455334589763307998:-2971181471269134244]]></update>
    </changes>
    <extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension>
</partial-response>

4

5 回答 5

8

JSF 将使用组件本身的 ID 附加UINamingContainer子项的 ID(h:formh:dataTable等) 。您可以通过将属性UINamingContainer设置为 来禁用此功能。prependIdfalse

<h:form prependId="false">

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

于 2010-10-28T10:49:42.867 回答
4

在 JSF 中,元素的 ID 以包含它们的表单的 ID 为前缀(更一般地,它们的 ID 以实现该NamingContainer接口的所有父组件的 ID 为前缀)。例如:

<h:form id="myForm">
    <h:inputText id="tom" .../>

将生成以下 HTML 代码:

<input id="myForm:tom" ...>

要访问,<input>您必须使用myForm:tomID 而不是tomID 本身。

使用 jQuery,您将不得不使用$("myForm\:tom").focus();

于 2010-10-28T10:49:17.687 回答
3

对于 Primefaces2,你应该使用 jQuery 而不是 $,像这样:

 <h:commandButton id="dome" value="提交" action="#{uInfo.doMe}">
  <f:ajax execute="@form" render="@form"/>
 </h:commandButton>
 ...
 <script type="text/javascript">
 function refresh() {
  jQuery("input#dome").click();
 }
 var t=setInterval('refresh()', 5000);
 </script>
于 2011-01-17T01:45:08.963 回答
1

您需要为该 JSF 标记提供一个id属性,如下所示:

<h:inputText id="tom" />

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

于 2010-10-28T01:33:08.157 回答
1

不要忘记 primefaces 还允许您使用属性 widgetvar 将您的组件绑定到 javascript 对象。

例如:

<p:inputText widgetvar="tom" id="tom" />

然后在您的 javascript 代码或一些 javascript 回调中,您可以执行以下操作:

tom.disable()

等等

于 2011-05-24T03:31:28.707 回答