2015-04-03 24 views
0

我是新来播放框架工作的人,而且我发现有点困难。 我正在检索从数据库客户端名称的列表并将其填充到一个下拉列表中,这里是我的client.java代码填充在播放框架工作中使用数据库中的值下拉菜单

package models; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.*; 

import play.db.ebean.Model; 
public class Client extends Model { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -1932214701504374792L; 
    public static String ClientName; 
    public static ArrayList<String> Clientdetail= new ArrayList<>(); 
    public static ArrayList<String> PopulateClient() { 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
      Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433","SUMEET","sumeet"); 
      Statement sta = conn.createStatement(); 
      String Sql = "select * from client"; 
      ResultSet rs = sta.executeQuery(Sql); 
      while (rs.next()) { 
       ClientName = rs.getString("ClientName"); 
       Clientdetail.add(ClientName); 
       } 

     } catch (InstantiationException | IllegalAccessException 
       | ClassNotFoundException |SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return(Clientdetail); 

    } 

} 

这里是我的application.java代码

package controllers; 

import models.Client; 

import play.mvc.*; 
import views.html.*; 

public class Application extends Controller { 


    public static Result index(){ 

     return ok(index.render(Client.PopulateClient())); 
    } 

} 

,这里是我的index.scala.html

@(ClientDetails: java.util.ArrayList[String]) 

@main("ADMS") { 

    <center> 
    <form id="select"> 
    <a>CONSULTANT</a> 
     <select name=Consultant> 
      <option value="lokesh">Lokesh</option> 
      <option>@ClientDetails</option> 
      <option>Vidyasekar</option> 
      <option>Abhishek</option> 
      <option>Naveen</option> 
      <option>Nanda</option> 
     </select> 
    <table border="1"> 
     <tr> 
     <td width=50px>Client</td> 
     <td width=50px>Project</td> 
     <td width=50px>Task</td> 
     <td width=50px>Date</td> 
     <td width=50px>Consultant</td> 
     <td width=50px>Role</td> 
     <td width=80px>Is Billable</td> 
     </tr> 
     <tr> 
     <td>@ClientDetails</td> 
     </tr> 
     </table> 
     </form> 
    </center> 
} 

main.scala.html

@(title: String)(Content: Html) 


<!DOCTYPE html> 

<html> 
    <head> 
     <title>@title</title> 
    </head> 
    <body> 
    @Content 
    </body> 
</html> 

有人能帮助我吗?我需要使用数组值填充下拉列表,并且填充的数据只是括号 - >“[]”

+1

@(标题:字符串)(ClientDetails:列表[客户])它应该是@(标题:字符串)(ClientDetails:java.util.List [字符串]) – 2015-04-03 14:07:43

+0

@GovindSinghNagarkoti我试着你告诉的代码和它的力量工作 – 2015-04-05 10:01:53

+0

@GovindSinghNagarkoti是的建议你给了作品,但显示[]可以告诉我一种方式来显示在下拉列表中的列表?我已经更新了代码 – 2015-04-06 07:28:52

回答

1

Play框架提供了模板帮助程序库,它提供了使用选项和选定值构建选择下拉菜单的功能。 一旦理解正确,使用起来相当简单。

@ helper.select()方法在视图中使用与选择类型的输入字段相关的各种参数。第一个参数是表单字段,因为在这里我们没有任何形式,所以我们可以创建一个临时表单并使用名称Consultant创建一个新的字段[因为这将选择字段的name属性的值]。 第二个参数将是key和value对应的选项的映射,分别对应option标签的值和option标签中的文本。

控制器代码

package controllers; 

import models.Client; 

import play.mvc.*; 
import views.html.*; 

public class Application extends Controller { 


    public static Result index(){ 

     return ok(index.render(Client.getClientDetails())); 
    } 

} 

型号代码

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.*; 

import play.db.ebean.Model; 
public class Client extends Model { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -1932214701504374792L; 
    public static String ClientName; 
    public static HashMap<String, String> Clientdetail= new HashMap<String, String>(); 
    public static HashMap<String, String> getClientDetails() { 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
      Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433","SUMEET","sumeet"); 
      Statement sta = conn.createStatement(); 
      String Sql = "select * from client"; 
      ResultSet rs = sta.executeQuery(Sql); 
      while (rs.next()) { 
       ClientName = rs.getString("ClientName"); 
       Clientdetail.put(ClientName,ClientName); 
       } 

     } catch (InstantiationException | IllegalAccessException 
       | ClassNotFoundException |SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return(Clientdetail); 

    } 

} 

查看代码:index.scala.html

@(ClientDetails: java.util.HashMap[String, String]) 

@import helper._ 

@main("ADMS") { 

    <center> 
    <form id="select"> 
    <a>CONSULTANT</a> 
    @select(Form.form()("Consultant"),   
     options(ClientDetails), 
     'value -> "clientName1"[any value that should be selected by default]) 
    <table border="1"> 
     <tr> 
     <td width=50px>Client</td> 
     <td width=50px>Project</td> 
     <td width=50px>Task</td> 
     <td width=50px>Date</td> 
     <td width=50px>Consultant</td> 
     <td width=50px>Role</td> 
     <td width=80px>Is Billable</td> 
     </tr> 
     <tr> 
     <td>@ClientDetails</td> 
     </tr> 
     </table> 
     </form> 
    </center> 
} 
+0

我已更新数据并在'Clientdetail.put(ClientID,ClientName)中添加ClientID;'现在我在哪里放置ClientID和ClientName在'@select (形成。我尝试了你已经放置的确切代码,并且它正在打印{}()(“Consultant”), options(ClientDetails), 'value - >“clientName1”[应该默认选择的任何值)' – 2015-04-06 10:57:42

+0

}在UI中,并没有其他 – 2015-04-06 11:14:55

+0

使用检查元素来检查它是否正在创建select元素 – 2015-04-06 11:40:47

0

是的,不幸的是,Play的模板系统是基于Scala的,所以您必须映射到您的@ClientDetails:

@ClientDetails.map { clientName => 
    <option>@clientName</option> 
} 

如果返回更复杂的对象可能看起来更像是这样的:

@ClientDetails.map { client => 
    <option value="@client.id">@client.name</option> 
} 

我希望这有助于!

+0

对,您需要使用我向您展示的方法将列表转换为字符串。或者为列表提供toString方法。 – 2015-04-05 14:22:56

+0

我试过了你发送的代码,但它的工作方式你怎么能把ClientName当Client.java本地?以及如何循环ClientDetails中的所有元素,并把它作为选项来选择 – 2015-04-06 07:57:18