2017-05-31 64 views
1

有很多最終用戶web框架(Bootstrap就是其中之一),它們使得鏈接看起來像按鈕。但是,在頁面上進行鍵盤導航時,這兩種方式並不相同:按鈕可以按Space推送,鏈接需要按Enter才能激活。JSF使用Tab和Space鍵激活一個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

沒有嘗試過它,但是你認爲覆蓋像Prim這樣的庫的渲染器是安全的嗎?界面或類似?在這種情況下,伊莫可能會有一些內在的邏輯。 – Osw

+0

我已經嘗試了核心JSF命令鏈接。這對我有效。如果你使用'p:commandLink',你應該可以用'p:commandButton'中的一個替換它的渲染器。雖然沒有特別嘗試過。 –