我正在使用play framwork 1.2.5开发一个简单的登录应用程序,并建立了与本地postgres数据库的连接;问题是尝试从数据库读取以验证登录信息和用户是否匹配。
问题是我在url:... / application / signin上得到一个空白页面,而从signIn方法呈现的html页面应输出:TODO写入内容
ps:我已经上传了jdbc驱动程序是lib
感谢
App/conf
# If you need a full JDBC configuration use the following :
db.url=jdbc:postgresql:postgres
db.driver=org.postgresql.Driver
db.user=postgres
db.pass=******
#
---------------------------------------------
the login page
<body>
#{form @Application.signIn()}
<form>
Online ID <input type="text" name ="onlineID" value="${onlineID}"><br>
Passcode <input type="text" name ="passcode" value="${passcode}">
<input type ="submit" value="Sign in">
</form>
#{/form}
</body>
---------------------------------------------
controller.App.java
public static void signIn(String onlineID, String passcode) {
login existing = new login(onlineID,passcode);
boolean verify=existing.check(existing.getOnlineID(),existing.getPassCode());
if(verify)
render("@Application.account");
}
---------------------------------------------
model.login.java
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import play.data.validation.*;
import play.db.DB;
public class login {
@Required public String onlineID;
@Required public String passcode;
public login(){}
public login(String onlineID,String passcode){
this.onlineID=onlineID;
this.passcode=passcode;
}
public void setOnlineID(String onlineID){
this.onlineID=onlineID;
}
public String getOnlineID(){
return this.onlineID;
}
public void setPassCode(String passcode){
this.passcode=passcode;
}
public String getPassCode(){
return this.passcode;
}
public boolean check(String onlineID,String passcode){
boolean verify=false;
Connection conn=null;
Statement stmt=null;
try{
conn = DB.getConnection();
stmt=conn.createStatement();
String sql;
sql="SELECT Cust_ID,password from corebanking.customer";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
int uID=rs.getInt("Cust_ID");
String ssn=rs.getString("SSN");
String pas=rs.getString("password");
String loginID=Integer.toString(uID);
if (onlineID.equals(loginID) && passcode.equals(pas)){
verify=true;
}
}
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
return verify;
}
}
---------------------------------------------
routes
GET / Application.index
GET / controllers.Application.signIn()
答案 0 :(得分:0)
问题是当您访问页面时:... / application / signin以显示登录表单。由于登录页面不是静态资源,因此Play Framework必须通过控制器才能访问此页面。
但是,signin方法中的Application控制器在第一个请求中没有获取任何参数,并且verify变量为false,因此返回空白页面。
您应该在Application控制器中创建另一个方法,如下所示:
public static void showLogin() {
render("/path/to/login.html");
}
您的第一个请求应该发送到... / application / showLogin。然后,您将获得登录页面,在提交正确的用户名和密码后,您应该会看到“帐户”页面。
但是,如果您错过了用户名或密码,仍然会出现空白屏幕。您应该在登录方法中添加以下内容
public static void signIn(String onlineID, String passcode) {
login existing = new login(onlineID,passcode);
boolean verify=existing.check(existing.getOnlineID(),existing.getPassCode());
if(verify)
render("@Application.account");
// the following code is added
else
render("@Application.authenticationFailed")
}
我希望这能解决你的问题。