0

我想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;
}
4

0 回答 0