JSF를 처음 사용하고 로그인 페이지가 있습니다. 여기에 사용자 클래스입니다JSF에서 Setter 메소드가 작동하지 않습니다.
<?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://xmlns.jcp.org/jsf/html">
<h:head>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2" border="1">
<h:outputText value="User:"></h:outputText>
<h:inputText id="username" value="#{login.username}"></h:inputText>
<h:outputText value="Password"></h:outputText>
<h:inputSecret id="password" value="#{login.password}"></h:inputSecret>
<h:commandButton value="Login" action="#{login.checkDB}"></h:commandButton>
</h:panelGrid>
</h:form>
</h:body>
</html>
그리고 여기에 로그인 JSF 페이지
@Named(value = "login")
@Dependent
@RequestScoped
public class Login{
private String username = "", password = "";
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String Username) {
username = Username;
}
public void setPassword(String Password) {
password = Password;
}
public void checkDB() {
try {
con=DB.connect();
PreparedStatement checkDB = (PreparedStatement) con.prepareStatement(
"SELECT * FROM Users where username = ? AND password = ?");
checkDB.setString(1, username);
checkDB.setString(2, password);
ResultSet rs = null;
rs = (ResultSet) checkDB.executeQuery();
if (rs.next()) {
User.customer = new Customer(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7));
rs.close();
DB.disconnect(con);
FacesContext.getCurrentInstance().getExternalContext().redirect("main.xhtml");
} else {
rs.close();
DB.disconnect(con);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
그리고 :
@ManagedBean(name = "user")
@SessionScoped
public class User implements Serializable {
public static Customer customer;
private Connection con=null;
public void setCustomer(Customer customer) {
User.customer = customer;
}
public Customer getCustomer() {
return customer;
}
public User() {
}
public void editInfo() {
String name = customer.getName(), surname = customer.getSurname(), password = customer.getPassword();
String phone = customer.getPhone(), address = customer.getAddress(), email = customer.getEmail();
try {
con=DBConnect.connect();
int result = -1;
PreparedStatement checkDB = (PreparedStatement) con.prepareStatement(
"UPDATE users set password=?,name=?,surname=?,phone=?,address=?,"
+ "email=? where username=?");
checkDB.setString(7, customer.getUsername());
checkDB.setString(1, password);
checkDB.setString(2, name);
checkDB.setString(3, surname);
checkDB.setString(4, phone);
checkDB.setString(5, address);
checkDB.setString(6, email);
result = checkDB.executeUpdate();
con.close();
FacesContext.getCurrentInstance().getExternalContext().redirect("editsuccesfull.xhtml");
} catch (Exception e) {
e.printStackTrace();
}
}
이 문제는, 사용자 이름과 암호가 설정 한 후
여기있다 setter는 함수가 관리 Bean에서 리턴 할 때 대기 상태가됩니다. 왜 이런 일이 일어나는 걸까요? 어떻게 해결할 수 있습니까?
빈은 요청 범위가 –
@KorayTugay입니다. 여기에있는 유일한 문제는 아닙니다. –
[질문 [*]에 대한 답변에서 언급 한 요점을 조사하는 대신 동일한 후속 질문을 게시하는 이유는 무엇입니까? (http://stackoverflow.com/questions/17469667/not-sure-if-i-am-using- the-sessionscope- 올바르게)? 또한 여러 계정을 갖는 것은 SO에서 권장하지 않습니다. – skuntsel