2016-09-21 10 views
2

文書によれば、フォーム入力 要素コンポーネントが 'for'属性を介してフォーカスを受け取ることを明示的に宣言することが可能でなければなりません。 この場合、デフォルトで最初の入力要素ではなく2番目の可視入力要素が有効になっています - だから、誰かが次のことがうまくいかない理由を説明してくれますか?p:focusの '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サーブレット:2.5 サーバー:Apache Tomcatの8.0.15]を

+1

6.0で動作しますが、3.5ではコードが異なります: 'focus.findComponent(focus.getFor())' vs 'SearchExpressionFacade.resolveComponent(context、focus、focus.getFor())' –

答えて

0

あなたがp:focusレンダラのソースを確認した場合、あなたはケースには(あなたが表示されますコンポーネントが解決される)forを設定するとJavaScriptのビットがwrittenである:それはあなたのソフトウェアスタックのために働いていないので

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

は、JavaScriptを自分でp:focusを省略し、単に書くことができます:

<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は機能しています。

関連する問題