2017-05-31 1 views
1

リンクはボタンのように見える多くのエンドユーザーWebフレームワーク(ブートストラップの1つです)があります。しかし、これらの2つは、ページ上のキーボードナビゲーションに関しては同じではありません。ボタンはSpaceでプッシュすることができます。リンクをアクティブにするには、Enterを押す必要があります。JSFタブとスペースキーを使ってh:commandLinkをアクティブにする

サーバー側でh:commandLinkh:commandButtonが機能的に同じであることを考えれば、キーボードナビゲーションを使用しても同じように動作させるにはどうすればよいですか?これは基本的には、h:commandLinkをリンクをクリックしてスペースバーを押すことによって同じアクションを引き起こす方法につきましては.xhtmlのソースを書き換えずに行うことができます。

私の限られた知識では、可能なオプションは、イベントリスナーを使用するか、または特別なタグラッパーを書くか、ResponseWriterというカスタムを使用して、ツリー内の各ClientBehaviorHolderを更新します。何か案は?

答えて

1

私の助言:は変更のxhtmlソースを変更します。ボタンのように見えるリンクを実際のボタンに変換します。これは物事をシンプルに保つため、望むならコマンドリンク(リンクのように見える)を使用するオプションがあります。 JavaScriptを使用してこの問題を回避しようとしないで、特定のキーを押したときに特定の動作が予想されるユーザーには迷惑をかけないでください。

実際にxhtmlを変更できない場合、各コマンドリンクをコマンドボタンに変換しても問題ない場合は、コマンドリンクコンポーネントのoverride the rendererをボタンとして表示できます。あなたがクロサギ科上にある場合、あなたはあなたのfaces-config.xmlで次のレンダラを使用することができます。

<render-kit> 
    <renderer> 
    <component-family>javax.faces.Command</component-family> 
    <renderer-type>javax.faces.Link</renderer-type> 
    <renderer-class>com.sun.faces.renderkit.html_basic.ButtonRenderer</renderer-class> 
    </renderer> 
</render-kit> 

も参照してください:

+0

は試していませんそれは、プリムのようなライブラリのレンダラーをオーバーライドすることは安全だと思いますか? efaceまたは同様のもの?この場合、内部にはいくつかのロジックが失われるかもしれません。 – Osw

+0

私はコアのJSFコマンド・リンクを試しました。それは私のために働いた。 'p:commandLink'を使用している場合は、そのレンダラーを' p:commandButton'のものに置き換えることができます。特にそれを試みていない。 –

関連する問題