当clientId实际不存在时,如何将自定义FacesMessage发送到页面

时间:2017-04-14 16:33:32

标签: jsf

我在Glassfish 4上使用JSF 2.2。

我想向<h:message .../>代码发送消息。

对于我的以下登录页面,我想从我的FacesMessage向clientId login-error发送登录失败的自定义UserBean

我的login.xhtml

<h:form id="login-form">
    <table>
        <tr>
            <td><h:outputLabel value="Username" for="username" /></td>
            <td><h:inputText id="username" value="#{userBean.username}" /></td>
        </tr>
        <tr>
            <td><h:outputLabel value="Password" for="password" /></td>
            <td><h:inputSecret id="password" value="#{userBean.password}" /></td>
        </tr>
        <tr>
            <td></td>
            <td><h:commandButton value="Submit" action="#{userBean.login()}" /></td>
        </tr>
    </table>
    <div>
        <h:message for="login-error" errorClass="err" />
    </div>
</h:form>

我的UserBean

@Named
@SessionScoped
public class UserBean implements Serializable {
    . . .

    public String login() {
        if (validate(username, password)) {
            return "/success?faces-redirect=true";
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        String msgText = "Username or Password is incorrect";
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
        ctx.addMessage("login-error", msg );
        return "";
    }

}

我在服务器控制台中收到以下消息:

2017-04-14T21:43:02.298+0530|Warning: Unable to find component with ID login-error in view.
2017-04-14T21:43:04.923+0530|Warning: Unable to find component with ID login-error in view.
2017-04-14T21:43:04.923+0530|Info: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=login-error[severity=(ERROR 2), summary=(Username or Password is incorrect), detail=(Username or Password is incorrect)]

我也尝试过使用clientId login-form:login-error,但也无效。

所以,我的问题是当clientId实际上不存在时如何将自定义FacesMessage发送到页面?我的方法不正确吗?

我知道我可以使用<h:messages />,但我不想使用它。

0 个答案:

没有答案