#java #jsf
#java #jsf
Вопрос:
Я новичок в JSF и пытаюсь создать сценарий входа в JSF. Он успешно перенаправляет на loginsuccess и loginfailure. но когда дело доходит до перенаправления пользователя, когда пользователь ввел пароль 3 раза неправильно, он не перенаправляет -> это выдает мне эту ошибку -> Невозможно найти соответствующий навигационный регистр с помощью from-view-id ‘/index.xhtml’ для действия ‘#{login.checkLogin}’с результатом «loginlocked». Я использую Netbeans 7.0 и не могу найти faces-config.xml .
Index.html
<?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">
<head><title>JSF Login</title></head>
<body>
<h:form>
<table>
<tr>
<td><h:outputText value="Username: " /></td>
<td><h:inputText id="loginname"
value="#{login.userName}" />
</td>
</tr>
<tr>
<td><h:outputText value="Password: " /></td>
<td><h:inputSecret id="password"
value="#{login.password}" />
</td>
</tr>
<tr>
<td> </td>
<td><h:commandButton value="Login"
action="#{login.checkLogin}"/>
</td>
</tr>
</table>
<h:outputLabel value="#{login.label1}" />
</h:form>
</body>
</html>
loginBean.java
package login;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="login")
@RequestScoped
public class loginBean {
private String userName;
private String password;
private String label1;
private static int numOfAttempts = 0;
/** Creates a new instance of loginBean */
public loginBean() {
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the label1
*/
public String getLabel1() {
return label1;
}
/**
* @param label1 the label1 to set
*/
public void setLabel1(String label1) {
this.label1 = label1;
}
public String checkLogin()
{
if (userName.equals("Neetu") amp;amp; password.equals("123456"))
{
this.setLabel1("Login Success");
return "loginsuccess";
}
else
{
numOfAttempts ;
if (numOfAttempts >= 3)
{
this.setLabel1("Account Locked");
return "loginlocked";
}
else
{
this.setLabel1("Login Failure" numOfAttempts);
return "loginfailure";
}
}
}
}
Ответ №1:
Предполагая, что вы полагаетесь на новую функцию неявной навигации JSF 2.0, эта ошибка в основном означает, что у вас нет loginlocked.xhtml
файла.
Обычно faces-config.xml
он находится в папке веб /WEB-INF
-приложения. Но в JSF 2.0 вам это не обязательно нужно.
Не связанный с конкретным вопросом, в вашем компоненте есть серьезная проблема с дизайном:
private static int numOfAttempts = 0;
static
Поле является общим для всех экземпляров класса по всему приложению. Если один посетитель неправильно вводит пароль 3 раза, то все остальные посетители блокируются. Хотя это произойдет, когда вы исправите другую ошибку в своем коде. Вы не checkLogin()
используете метод, проверяющий, numOfAttempts
превышено ли значение, прежде чем проверять имя пользователя / пароль. Таким образом, любой, кто заблокирован, все равно может успешно войти в систему, когда введено правильное имя пользователя / пароль.
Работайте над своим логическим мышлением и математическими навыками 🙂