如何通过' for'获得明确的焦点。属性p:焦点?

时间:2016-09-21 14:26:31

标签: primefaces attributes focus explicit

根据文档,应该可以明确声明表单输入 元素组件通过' 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>

非常感谢!

[PrimeFaces:3.5.25 JavaServer Faces:1.2 Java Servlet:2.5 服务器:Apache Tomcat 8.0.15]

1 个答案:

答案 0 :(得分:0)

如果您检查p:focus渲染器的来源,您会看到(如果您设置了for)该组件已解析且JavaScript有点written

writer.write("$(function(){");
writer.write("PrimeFaces.focus('" + clientId +"');");
writer.write("});");

由于它不适用于您的软件堆栈,您可以省略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>

是的,这是一个黑客攻击。如果可以,请升级软件堆栈。对我来说,你的XHTML正在发挥作用。