JSF使用选项卡和空格密钥激活H:commandlink



有很多最终用户的Web Frameworks(Bootstrap是其中之一(,使链接看起来像按钮。但是,这两个在页面上的键盘导航时并不相同:可以通过Space按下按钮,链接将需要按Enter激活。

鉴于h:commandLinkh: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:如何用自定义的渲染器覆盖基础渲染器?

最新更新