Focus manages element focus in forms. By default first visible and enabled input element(e.g. text, textarea, select) is chosen to receive focus automatically. It is also possible to explicitly declare the component to receive focus via the for attribute. Focus is also aware of failed validations, first invalid input component receives a focus automatically.
<div class="card">
<h:form>
<p:focus context="panel"/>
<p:messages/>
<h:panelGrid id="panel" columns="3" cellpadding="7">
<p:outputLabel for="username" value="Username"/>
<p:inputText id="username" value="#{focusView.username}" required="true" label="Firstname">
<f:validateLength minimum="2"/>
</p:inputText>
<p:message for="username"/>
<p:outputLabel for="email" value="Email"/>
<p:inputText id="email" value="#{focusView.email}" required="true" label="Surname"/>
<p:message for="email"/>
</h:panelGrid>
<p:commandButton id="submitButton" value="Save" update="@parent" action="#{focusView.save}" styleClass="mt-3" />
</h:form>
</div>
package org.primefaces.showcase.view.misc;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
@Named
@RequestScoped
@RegisterForReflection(serialization = true)
public class FocusView {
private String username;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void save() {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success", "User Saved"));
username = null;
email = null;
}
}