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

Posted

技术标签:

【中文标题】在播放框架 1.2.5 中处理来自本地 postgres 的数据【英文标题】:processing data from local postgres in play framework 1.2.5 【发布时间】:2014-01-13 05:34:53 【问题描述】:

我正在使用 play 框架 1.2.5 开发一个简单的登录应用程序,并建立了与本地 postgres 数据库的连接;问题是尝试从数据库中读取以验证登录信息和用户是否匹配。

问题是我在 url:.../application/signin 上得到一个空白页面,而从 signIn 方法呈现的 html 页面应该输出:TODO write content

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()

【问题讨论】:

为什么不用jpa? 谢谢。想测试本地 postgres,然后连接到 heroku 上的云 postgres 更新:当我使用 mysql 而不是 postgres 时,此应用程序可以处理数据 【参考方案1】:

问题是当您访问页面时:.../application/signin 以显示登录表单。由于登录页面不是静态资源,Play Framework 必须通过一个控制器才能到达该页面。

但是,您的应用程序控制器在登录方法中没有在第一个请求中获取任何参数,并且验证变量为假,因此返回空白页面。

您应该像这样在 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")


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

【讨论】:

谢谢里斯特!我很快就会更新我的 prostgres 连接的最新情况!

以上是关于在播放框架 1.2.5 中处理来自本地 postgres 的数据的主要内容,如果未能解决你的问题,请参考以下文章

播放框架 1.x 上的电子邮件模板国际化/本地化

运行Bootstrap加载时播放框架1.2.5异常

在播放框架 1.2.5 中,扩展作业运行后台阻止请求/响应的类

在播放框架 1.2.5 中对路由不区分大小写

播放框架中的会话处理

播放框架1.2.5应用项目如何重命名