我想p:focus
在包含带有输入字段的表单的页面上使用 Primefaces 标记。在第一次提交之前,焦点设置正确。如果我通过 a 提交表单p:commandButton
并返回到同一页面以显示错误结果(使用 FacesMessage 消息),则焦点未定义(在 Firefox 中,光标在中间闪烁)。
如何实现已定义的焦点状态?提交后我可以选择哪个元素具有焦点吗?
以下是一些代码细节:
JSF 页面:
<p:panel header="Login">
<h:form>
<p:focus for="usernameInput" />
<p:panelGrid columns="2">
<p:outputLabel for="usernameInput">User name</p:outputLabel>
<p:inputText id="usernameInput" value="#{loginBean.username}" />
<p:outputLabel for="passwordInput">Password</p:outputLabel>
<p:password id="passwordInput" value="#{loginBean.password}" />
</p:panelGrid>
<p:commandButton value="Login" action="#{loginBean.login}" />
</h:form>
</p:panel>
<div>
<p:messages id="messages" globalOnly="false" autoUpdate="true" showDetail="true" showSummary="true" closable="false" />
</div>
Java类的相关部分:
public String login() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest req =
(HttpServletRequest) fc.getExternalContext().getRequest();
try {
req.login(username, password);
return "/home?faces-redirect=true";
} catch (ServletException e) {
fc.addMessage(
null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
"error message")));
}
return null;
}