JSF ajax 呈现消息和重定向



我有一个JSF应用程序,用户在其中登录登录表单,插入他们的电子邮件和密码。托管豆有以下 2 种方法。

该方法checkIdentity1()返回一个 URL(" 如果验证不正确以保持在同一页面中,则返回/useraccount.xhtml如果插入的数据可以转到下一页)。

该方法checkIdentity2()返回一个布尔值(如果验证错误以显示消息,则为 false,如果正常,则为 true)。

登录管理豆.java

public String checkIdentity1()
{
    String strResponse="";
    //check id
    if(email.equals("jose@a.com") && password.equals("1234"))
    {
        strResponse="/useraccount.xhtml?faces-redirect=true";
    } else {
    }
    //
        return strResponse;
}
public boolean checkIdentity2()
{
    boolean bResponse=false;
    //check id
    if(email.equals("jose@a.com") && password.equals("1234"))
    {
       //setpassIncorrecta(false); 
    } else {
        bResponse=true;
    }
    //
    return bResponse;
}

我正在尝试做的是混合 ajax 和 JSF 以在我单击登录按钮时显示"电子邮件和/或密码不正确",验证失败并转到帐户.xhtml验证正常时。但是当我插入不正确的电子邮件和密码时,不会显示任何消息,并且当我正确插入它们时,页面不会重定向到帐户.xhtml。我做错了什么?

这是我的面孔

 <h:form> 
    <!--Email-->
    <h:inputText id="email" label="email" required="true" size="32" maxlength="32"
         value="#{loginManagedBean.email}"
         requiredMessage="Insert your email">              
    </h:inputText>
    <h:message for="email" />

    <!--Password-->
    <h:inputSecret id="password" label="password" required="true" size="32" maxlength="40"
        value="#{loginManagedBean.password}" 
        requiredMessage="Insert your password">            
    </h:inputSecret>
    <h:message for="password" />

    <!--Button-->
    <h:commandButton value="Login" action="#{loginManagedBean.checkIdentity1()}">
    <f:ajax execute="@form" render=":loginErrorMessage" />
    </h:commandButton>
</h:form>

<h:panelGroup id="loginErrorMessage">
    <h:outputText value="Email and/or password incorrect" rendered="#{!loginManagedBean.checkIdentity2()}" />
</h:panelGroup>

就像我在评论中解释的那样,这就是 JSF 的工作方式:如果请求验证失败,则不会执行 action 方法。这定义了 JSF 请求处理生命周期(我不会在这里讨论)。出于本答案的目的,您需要知道的是请求参数的验证发生在考虑action方法之前。话虽如此,如果验证失败,请求处理就会在那里短路。要实现您正在寻找的目标,您应该考虑以下几点:

  1. 要有条件地呈现该组件,您可以检查页面中的验证状态:

    <h:outputText value="Email and/or password incorrect" rendered="#{facesContext.validationFailed}" />
    

    理想情况下,您应该只使用 <h:messages/> 组件,您无需自己管理消息显示

默认情况下,如果验证失败,JSF 将保持在同一页面上,因此您无需为此执行任何特殊步骤

相关内容

  • 没有找到相关文章