2009-10-09 50 views
7

我需要在加載頁面時將輸入焦點指向特定的輸入文本組件(以允許使用條形碼掃描器輸入值)。將焦點設置爲JSF輸入文本

在純HTML中,我會爲body標籤添加一個JavaScript「onload」處理函數,但JSF中必須有更好的方法。

什麼是「最乾淨」的方式來達到這一目的:

  1. 「靜態」,其中同一控制接收焦點每個頁面負載的情況下。
  2. 「動態」情況下,這可能是每個頁面加載的不同控制。

回答

7

有趣的問題。

JSF沒有任何東西可以做到這一點。您已經知道如何在純HTML/Javascript中執行此操作,並且沒有什麼不同,JSF將其添加到其他內容中,而不是瘋狂的ID。

因此,對於「靜態」訪問,您只需確保指定完整的JSF標識,例如。 「myForm會:mydiv:myinput」。這不是很乾淨,雖然如果你的網頁改變了,那麼這個ID也可能會改變。

理想情況下,您將擁有一個JSF組件,您將嵌入<h:inputText>之內,這表明需要重點。例如:

<h:inputText value="#{whatever}"> 
    <my:focusComponent /> 
</h:inputText> 

從技術上講,這不是一個難解決的辦法。組件只會找到它的ID,然後添加一些調用focus()的javascript。

Seam與它的<s:defaultAction/>組件相似,它使鏈接或按鈕響應輸入密鑰。你可能想看看它的源代碼。

+0

我喜歡你的動態解決方案。如果焦點控制在整個地方移動,它都有一些限制,但在我的情況下就足夠了。謝謝! – Timo 2009-11-15 21:02:23

+0

如果您指定了自己的JSF ID,它並不瘋狂。 :-)只是不要讓它自己做!作爲一個側面說明,Apple iDevices似乎忽略了在JavaScript窗口加載期間爲輸入設置焦點的嘗試。從通用網頁瀏覽的上下文中可以看出,但在嘗試構建自定義Web應用程序(尤其是使用條形碼掃描儀進行輸入的應用程序)時非常刺激。 – 2012-04-12 18:41:32