有很多最终用户的Web Frameworks(Bootstrap是其中之一(,使链接看起来像按钮。但是,这两个在页面上的键盘导航时并不相同:可以通过Space
按下按钮,链接将需要按Enter
激活。
鉴于h:commandLink
和h:commandButton
在服务器端的功能相同的事实,我该如何在使用键盘导航时使它们的行为相同?这基本上可以归结为如何通过单击链接和按Spacebar 而无需重写.xhtml
源来使h:commandLink
触发相同的动作。
在我有限的知识中,可能的选项是使用事件听众或编写特殊标签包装器,甚至是自定义ResponseWriter
来更新树中的每个ClientBehaviorHolder
。有什么想法吗?
我的建议: do Change XHTML源。将看起来像按钮的链接转换为实际按钮。这是为了使事情变得简单,并且您可以选择仍然使用命令链接(看起来像链接(,如果需要的话。不要尝试使用JavaScript解决问题,并惹恼用户在按某些键时期望某些行为的用户。
如果您真的无法更改XHTML,并且可以将每个命令链接转换为命令按钮,则可以覆盖命令链接组件的渲染器并将其渲染为按钮。如果您在Mojarra上,则可以在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>
另请参见:
- 按钮和链接键盘触发器
- jQuery-触发与SpaceBar链接上的事件?
- JSF 2.0:如何用自定义的渲染器覆盖基础渲染器?