1

我正在使用 primefaces 实现登录表单,但未显示我的消息,可能是什么?

我尝试使用 id 字段或在方法 addMessage() 中传递 null。

我的 xhtml 代码:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:head>
        <title>Test</title>
    </h:head>
    <h:body>
          Wellcome<br/>
        <h:form id="login">
            <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
            <p:growl id="msg" showDetail="true" life="3000" />
            <p:panel header="Login" style="width: 360px;">
                <h:panelGrid id="loginPanel" columns="2">
                <h:outputText value="Email:" for="email" />
                <p:inputText id="email" value="#{loginBean.email}" ></p:inputText>
                <p:spacer></p:spacer>
                <p:message for="email" />

                <h:outputText value="Senha" for="senha" />
                <p:password id="senha" value="#{loginBean.senha}"  feedback="false" minLength="1"></p:password>
                <p:spacer></p:spacer>
                <p:message for="senha" />
                <p:spacer></p:spacer>
                <p:commandButton action="#{loginBean.loginAction}" value="Login" update="loginForm" ajax="true"></p:commandButton>
            </h:panelGrid>
            </p:panel>
        </h:form>
    </h:body>
</html>

我的豆子:

@ManagedBean
@RequestScoped
public class LoginBean {

    private static final long serialVersionUID = 1L;
    private String email;
    private String senha;

    @ManagedProperty(value="#{usuarioSessionBean}")
    private UsuarioSessionBean usuarioSessao;

    public String loginAction()
    {
        //Valida preenchimento dos campos de email e senha
        boolean campoBranco = false;
        if((email == null) || (email.trim().length() == 0))
        {
            campoBranco = true;
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, "Email não informado!","Preencha o email e tente novamente!"));
        }

        if((senha == null) || (senha.trim().length() == 0))
        {
            campoBranco = true;
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, "Senha não informada!","Preencha a senha e tente novamente!"));
        }

        if(campoBranco)
            return "login";
    }
}

谁能告诉我出了什么问题?他返回登录页面,但没有显示消息。

4

2 回答 2

3

如果我的理解是正确的,您的意思是说您想向用户显示消息,请尝试以下操作:

    if((senha == null) || (senha.trim().length() == 0))
            {
                campoBranco = true;
                FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, "Senha não informada!","Preencha a senha e tente novamente!"));
    return null;


}

这是您必须添加的内容return null;,以便它保持在同一页面并显示消息,当您在收到错误后再次尝试导航到登录页面时,它只会导航而不是显示错误消息。以及尝试在 xhtml 中进行修改,如下所示:

在你的 xhtml 中:

<p:growl id="growlLoginValidationStatus" showDetail="true" sticky="false" autoUpdate="true" life="4000" redisplay="false" showSummary="true" globalOnly="false" />

并删除您的<p:message/>标签并在您的命令按钮中将 ajax 设置为 false。试试这个,如果仍然无法显示消息,请在评论中告诉我

于 2013-04-26T19:45:37.700 回答
3

看来您正在更新错误的 ID。

<h:form id="login" >
    <p:commandButton value="Login" update="loginForm"
                     action="#{loginBean.loginAction}"/>
</h:form>

在这种情况下,您需要将表单更改loginFormlogin或更改为。idloginForm

于 2013-04-26T21:34:36.417 回答