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

Moh*_*ala 18 jsf focus

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

Bal*_*usC 28

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

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autofocus="true" />
Run Code Online (Sandbox Code Playgroud)

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

<h:inputText ... a:autofocus="#{component.valid ? null : true}" />
Run Code Online (Sandbox Code Playgroud)

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

window.onload = function() {
    document.forms[0].elements[0].focus();
}
Run Code Online (Sandbox Code Playgroud)

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

window.onload = function() {
    document.getElementById('formId:inputId').focus();
}
Run Code Online (Sandbox Code Playgroud)

如果您碰巧有jQuery,可以进行更精细的检查.

$(document).ready(function() {
    $(":input:visible:enabled:first").focus()
});
Run Code Online (Sandbox Code Playgroud)

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

实用程序/组件库可能具有内置自动对焦功能.OmniFaces有一个<o:highlight>突出显示回发的所有无效输入并自动聚焦第一个.默认情况下,PrimeFaces在完成ajax请求时自动复制 "最后一个活动"元素,并具有<p:focus>更细粒度的控制.另见以下相关问答:


Joh*_*tts 18

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

<p:focus for="inputId"/>
Run Code Online (Sandbox Code Playgroud)