在页面加载时将焦点设置为特定的JSF inputText

时间:2010-06-29 10:40:02

标签: jsf focus

我想在页面加载时将焦点放在JSF中的inputText字段上。我该如何实现呢?

2 个答案:

答案 0 :(得分:27)

如果您已经使用HTML5和JSF 2.2,请使用HTML5 autofocus属性。在JSF 2.2中,您可以将其设置为passthrough attribute

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autofocus="true" />

您甚至可以有条件地设置它,您只需要确保false条件的计算结果为null,否则该属性仍将被渲染。它是一个HTML布尔属性,因此只有它的存在已经是触发器,无论其值如何。当值显式设置为null时,JSF将不会完整地呈现该属性。

<h:inputText ... a:autofocus="#{component.valid ? null : true}" />

另一种方法是投入一些JavaScript。每个输入元素都有focus()函数。以下天真的Vanilla JS方法着重于第一种形式的第一个元素。

window.onload = function() {
    document.forms[0].elements[0].focus();
}

如果要在窗口加载期间聚焦特定的输入元素,请执行以下操作:

window.onload = function() {
    document.getElementById('formId:inputId').focus();
}

如果碰巧手头有jQuery,可以进行更精细的检查。

$(document).ready(function() {
    $(":input:visible:enabled:first").focus()
});

如果您打算仅在回发后执行它,请转到以下相关问答A:

实用程序/组件库可能具有内置自动对焦功能。 OmniFaces<o:highlight>突出显示回发的所有无效输入,并自动注释第一个。默认情况下,PrimeFaces会在完成ajax请求时自动复制“last active”元素,并且<p:focus>具有更精细的控制权。另见下文相关的Q&amp; A:

答案 1 :(得分:18)

如果你使用primefaces,你可以像这样集中你的输入:

<p:focus for="inputId"/>