我是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";
}
}
}
login.xhtml 的
<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());
都为空,checkLogin()
将全部返回&#34;无效&#34;。
我不知道为什么会发生这种情况以及如何解决它。
P.S。对不起我糟糕的英语。谢谢你的回复。
答案 0 :(得分:0)
applyValues 阶段负责设置请求中收到的值。
由于您尝试在构造函数中使用email
和password
,因此这些值将为null,因为容器没有时间应用这些值。这是在创建对象之后完成的。
有些选择是:
@PostConstruct
以便在 applyValues 完成后触发事件(不要这样做!)checkLogin()
事件中获取数据库中的值(我推荐)。另一个问题是会话管理的bean只会被创建一次,所以你会遇到麻烦。
我建议您在checkLogin()
内完成所有登录逻辑。
另外,如果您不需要,请不要使用@SessionScoped
。使用@RequestScoped
或@ViewScoped
保持简单。