2016-09-21 8 views
2

В соответствии с документацией должно быть возможно явно объявить, что элемент ввода формы получает фокус через атрибут «для». В этом случае второй видимый и активированный входной элемент, а не первый по умолчанию - , может ли кто-то помочь мне, объяснив, почему следующее не работает?Как получить явный фокус через атрибут «для» на p: focus?

<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

Работает для меня в версии 6.0, однако в 3.5: код focus.findComponent (focus.getFor()) 'vs' SearchExpressionFacade.resolveComponent (контекст, фокус, focus.getFor())' –

ответ

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.