[英]JSF2.2 getter and setter in PreparedStatement
我是JSF的初學者,正在嘗試創建登錄頁面,但是從facelet獲取數據時遇到問題。 Bean在faces-config.xml中作為SessionScope管理。
public class LoginBean
{
private String name;
private String email;
private String password;
PreparedStatement ps;
ResultSet rs;
private String sqlName;
private String sqlEmail;
private String sqlPassword;
public LoginBean() {
initDB();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void initDB() {
try{
//load driver
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded");
//get connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/userdb", "root", "root");
System.out.println("Connection estabilshed");
String sqlQuery = "select name, email, password from users "+
"where email=? and password=?";
ps = conn.prepareStatement(sqlQuery);
ps.setString(1, getEmail());
ps.setString(2, getPassword());
rs = ps.executeQuery();
if(rs.next()) {
sqlName = rs.getString(1);
sqlEmail = rs.getString(2).toString();
sqlPassword = rs.getString(3).toString();
}
else {
rs.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public String checkLogin() throws SQLException {
if(email.equalsIgnoreCase(sqlEmail)) {
if(password.equals(sqlPassword)) {
return "valid";
}
else {
System.err.println("Password Invalid");
return "invalid";
}
}
else {
System.err.println("Email Invalid");
return "invalid";
}
}
}
<h:inputText id="emailInputText" styleClass="inputText" required="true"
value="#{loginBean.email}"/>
<h:inputSecret id="passwordInputText" styleClass="inputSecret" required="true"
value="#{loginBean.password}"/>
<h:commandButton styleClass="commandButton" id="loginButton" value="Login" type="submit"
action="#{loginBean.checkLogin}"/>
<div id="footer" class="clearfix">
<p><span class="info">?</span><a href="#">Forgot Password</a> • <a href="#" >Register</a></p>
</div>
</h:form>
問題是
ps.setString(1, getEmail());
ps.setString(2, getPassword());
均為null, checkLogin()
始終返回“無效”。 我不知道為什么會這樣以及如何解決。
PS對不起,我的英語不好。 謝謝您的回復。
applyValues階段負責設置請求中接收的值。
由於您嘗試在構造函數中使用email
和password
,因此這些值將為null,因為容器沒有時間應用這些值。 這是在創建對象之后完成的。
一些選項是:
@PostConstruct
以便在applyValues完成后觸發事件(不要這樣做!) checkLogin()
事件中(我建議)從數據庫中獲取值。 另一個問題是,會話管理的Bean僅創建一次,因此您將遇到麻煩。
我建議您在checkLogin()
內部執行所有登錄邏輯。
另外,如果不需要,請不要使用@SessionScoped
。 使用@RequestScoped
或@ViewScoped
保持簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.