У меня есть приложение JSF, в котором пользователи регистрируются в форме входа, вставляя свою электронную почту и пароль. ManagedBean имеет следующие 2 метода.JSF ajax render message and redirect
Метод checkIdentity1()
возвращает URL-адрес ("", если проверка неверна для того, чтобы оставаться на той же странице, или /useraccount.xhtml, если вставленные данные одобрены, чтобы перейти на следующую страницу).
Метод checkIdentity2()
возвращает логическое значение (false, если проверка неверна, чтобы показать сообщение, true, если это нормально).
loginManagedBean.java
public String checkIdentity1()
{
String strResponse="";
//check id
if(email.equals("[email protected]") && password.equals("1234"))
{
strResponse="/useraccount.xhtml?faces-redirect=true";
} else {
}
//
return strResponse;
}
public boolean checkIdentity2()
{
boolean bResponse=false;
//check id
if(email.equals("[email protected]") && password.equals("1234"))
{
//setpassIncorrecta(false);
} else {
bResponse=true;
}
//
return bResponse;
}
То, что я пытаюсь сделать, это смешивать Ajax и JSF, чтобы показать «E-mail и/или пароль», когда я нажимаю кнопку Вход и проверка не пройдена и перейти к account.xhtml когда проверка правильна. Но когда я вставляю неверный адрес электронной почты и пароль, сообщение не отображается, и когда я правильно вставляю их, страница не перенаправляется на account.xhtml. Что я делаю не так?
Это мой Facelet
<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>
Если проверка не завершена, 'checkIdentity1' не будет выполнен, также не будет' 'проверкаIdentity2 '' возвращать ожидаемый результат, что является прямым результатом более раннего отказа. – kolossus
Не могли бы вы объяснить, почему? или представить пример? – jose
Суть в JSF заключается в том, что если запрос не прошел проверку, «действие» на кнопке команды не будет выполнено - это правило для JSF. Таким образом, ваша текущая логика не будет работать, потому что обработка вашего запроса не дойдет до выполнения метода 'checkIdentity1' – kolossus