2010-06-29 55 views

回答

23

如果您已經使用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(); 
} 

如果你想窗口加載過程中聚焦於特定的input元素,然後執行:

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

如果你碰巧有在jQuery的手,更細粒度的檢查,可以做。

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

如果你打算只回傳後,執行它,頭下面相關的Q &答:

效用/組件庫可以有內置自動聚焦設施。 OmniFaces有一個<o:highlight>,它突出顯示回發中的所有無效輸入並自動聚焦第一個輸入。 PrimeFaces默認情況下自動聚焦ajax請求完成時的「last active」元素,並有一個<p:focus>用於更細粒度的控制。見下面的相關Q &答:

15

如果使用primefaces,你可以關注你的輸入這樣的:

<p:focus for="inputId"/> 
+0

https://www.primefaces.org/ showcase/ui/misc/focus.xhtml – Andrew 2017-11-14 23:00:38

+0

請注意,在panelGrid中使用它將會混淆定位......將它放在外面......但是它似乎必須位於相同的表單或其他內部,所以請注意以及... – Andrew 2017-11-14 23:08:28

相關問題