Primefaces 如何通过';对于';p上的属性:焦点?

Primefaces 如何通过';对于';p上的属性:焦点?,primefaces,attributes,focus,explicit,Primefaces,Attributes,Focus,Explicit,根据文档,应该可以显式声明表单输入 元素组件通过“for”属性接收焦点。 在这种情况下,默认情况下,第二个可见且启用的输入元素而不是第一个- 那么,有人能帮我解释一下为什么下面的方法不起作用吗 <h:form id="form4"> <p:focus id="pick" for="input2" /> <h:inputText id="input1" value="#{messageManagedBean.message1}"/> &l

根据文档,应该可以显式声明表单输入 元素组件通过“for”属性接收焦点。 在这种情况下,默认情况下,第二个可见且启用的输入元素而不是第一个- 那么,有人能帮我解释一下为什么下面的方法不起作用吗

<h:form id="form4">
   <p:focus id="pick" for="input2" />   
   <h:inputText id="input1" value="#{messageManagedBean.message1}"/>
   <h:inputText id="input2" value="#{messageManagedBean.message2}"/>

   <p:commandButton value="Execute JSF Lifecycle - Invoke Action One" action="#{messageManagedBean.doSomeAction41}" ></p:commandButton>
   <p:commandButton value="Execute JSF Lifecycle - Invoke Action Two" 
action="#{messageManagedBean.doSomeAction42}" ></p:commandButton>   

   <p:messages for="input1" id="messages1" autoUpdate="true"/>
   <p:messages for="input2" id="messages2" autoUpdate="true"/>

</h:form>

非常感谢

[附件:3.5.25] JavaServerFaces:1.2 Javaservlet:2.5
服务器:Apache Tomcat 8.0.15]

如果您检查
p:focus
渲染器的源代码,您将看到(如果您为
设置
),组件已解析,一点JavaScript是:

由于它不适用于您的软件堆栈,您可以省略
p:focus
,只需自己编写JavaScript:

<h:form id="form4">
   <script>
       $(function(){ PrimeFaces.focus('form4:input2'); });
   </script>
   <h:inputText id="input1" value="#{messageManagedBean.message1}"/>
   <h:inputText id="input2" value="#{messageManagedBean.message2}"/>
   ...
</h:form>

$(function(){PrimeFaces.focus('form4:input2');});
...

是的,这是一个黑客。如果可以,请升级软件堆栈。对我来说,你的XHTML是有效的。

在6.0中对我有效,但在3.5中代码不同:
focus.findComponent(focus.getFor())
vs
SearchExpressionFacade.resolveComponent(context,focus,focus.getFor())
<h:form id="form4">
   <script>
       $(function(){ PrimeFaces.focus('form4:input2'); });
   </script>
   <h:inputText id="input1" value="#{messageManagedBean.message1}"/>
   <h:inputText id="input2" value="#{messageManagedBean.message2}"/>
   ...
</h:form>