在Play框架1.2.5中处理来自本地postgres的数据

时间:2014-01-13 05:34:54

标签: java database postgresql playframework playframework-1.x

我正在使用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()

1 个答案:

答案 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")

}

我希望这能解决你的问题。