2009-10-09 100 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