我想将db中生成的数据拆分为servlet和DISPLAY IT中的几个表。该表使用演示文稿ID进行组织。例如,我有10个人。我需要为主管和审查员分配相同的availableID
。我的系统将确定它们是否具有相似的availableID
。
我想在管理员单击SAVE按钮并将其插入db之前使用servlet临时显示它。
塞夫莱特:
for (int i=0; i<studentID.length ; i++) {
FreeBean free = new FreeBean();
free = GenerateScheduleDAO.getFree(supervisorID[i],examinerID[i]);
String SVavailableID = free.getAvailableID();
String EXavailableID = free.getAvailableID();
Date FreeDate = free.getFreeDate();
System.out.println("sv: "+ supervisorID[i] + SVavailableID + " ev: "+ examinerID[i] + EXavailableID);
if (SVavailableID.equals(EXavailableID))
{
if(SVavailableID.equals("2")&& EXavailableID.equals("2")){
out.println("<br><center><table><tr>"
+ "<th>Name</th>"
+ "<th>Title</th>"
+ "<th>Supervisor</th>"
+ "<th>Examiner Name</th>"
+ "<th>availableID</th>"
+ "<th>Time </th>"
+ "</tr>");
out.println("<tr>");
out.println("<tr>");
out.println("<td>"+ studentID[i]+"</td>");
out.println("<td> Hello </td>");
out.println("<td>"+ supervisorID[i] +"</td>");
out.println("<td>"+ examinerID[i] +"</td>");
out.println("<td>"+ SVavailableID+"</td>");
out.println("<td>"+ FreeDate+"</td>");
out.println("</tr><br>");
out.println("</center></table>");
}//2
if(SVavailableID.equals("7")&& EXavailableID.equals("7")){
out.println("<br><center><table><tr>"
+ "<th>Name</th>"
+ "<th>Title</th>"
+ "<th>Supervisor</th>"
+ "<th>Examiner</th>"
+ "<th>availableID </th>"
+ "<th>Time</th>"
+ "</tr>");
out.println("<tr>");
out.println("<tr>");
out.println("<td>"+ studentID[i]+"</td>");
out.println("<td> Hello </td>");
out.println("<td>"+ supervisorID[i] +"</td>");
out.println("<td>"+ SVavailableID+"</td>");
out.println("<td>"+ FreeDate+"</td>");
out.println("</tr><br>");
out.println("</center></table>");
}//7
if(SVavailableID.equals("10")&& EXavailableID.equals("10")){
out.println("<br><center><table><tr>"
+ "<th> Name</th>"
+ "<th> Title</th>"
+ "<th>Supervisor</th>"
+ "<th>Examiner</th>"
+ "<th>availableID </th>"
+ "<th>Time </th>"
+ "</tr>");
out.println("<tr>");
out.println("<tr>");
out.println("<td>"+ studentID[i]+"</td>");
out.println("<td> Hello </td>");
out.println("<td>"+ supervisorID[i] +"</td>");
out.println("<td>"+ examinerID[i] +"</td>");
out.println("<td>"+ SVavailableID+"</td>");
out.println("<td>"+ FreeDate+"</td>");
out.println("</tr><br>");
out.println("</center></table>");
}
if(SVavailableID.equals("16")&& EXavailableID.equals("16")){
out.println("<br><center><table><tr>"
+ "<th>Name</th>"
+ "<th>Title</th>"
+ "<th>Supervisor</th>"
+ "<th>Examiner</th>"
+ "<th>availableID </th>"
+ "<th>Time </th>"
+ "</tr>");
out.println("<tr>");
out.println("<tr>");
out.println("<td>"+ studentID[i]+"</td>");
out.println("<td> Hello </td>");
out.println("<td>"+ supervisorID[i] +"</td>");
out.println("<td>"+ examinerID[i] +"</td>");
out.println("<td>"+ SVavailableID+"</td>");
out.println("<td>"+ FreeDate+"</td>");
out.println("</tr><br>");
out.println("</center></table>");
}
}
但是,我得到这个结果:
Name Title Supervisor Examiner availableID Time
abc Hello 1024 1001 7 null
Name Title Supervisor Examiner availableID Time
abc Hello 1024 1001 7 null
Name Title Supervisor Examiner availableID Time
abc Hello 1024 1001 7 null
Name Title Supervisor Examiner availableID Time
abc Hello 1024 1001 7 null (so on..)
预期结果将是:
表
availableID = 7
:Name Title Supervisor Examiner availableID Time
abc Hello 1024 1001 7 null
def Hi 1024 1001 7 null
ghi Hey 1002 1004 7 null
jkl hhh 1027 1011 7 null
mno 123 1014 1034 7 null
表
availableID = 10
: Name Title Supervisor Examiner availableID Time
pqr 3333 1026 1021 10 null
stu 4444 1023 1001 10 null
vwx 5555 1002 1002 10 null
yz1 6666 1027 1031 10 null
234 7777 1034 1004 10 null
我该如何解决呢?
最佳答案
首先,您好像要一遍又一遍地重复代码。无论获得什么ID,您都在执行相同的(或相似的)任务。
我建议将可以组合的条件组合在一起,并在可能的情况下编写单个代码块。
所以会是这样的
if (SVavailableID.equals(EXavailableID)){
if (SVavailableID.equals("7") || SVavailableID.equals("2") || // and so on...) {
// print students data
}
}
其次,我会直觉地说您不想为每个学生打印表格标题。
您想事先打印它们,然后遍历学生的
array
以打印他们的详细信息。因此以下代码片段将超出您的for loop
// outside the for loop
out.println("<br><center><table><tr>"
+ "<th>Name</th>"
+ "<th>Title</th>"
+ "<th>Supervisor</th>"
+ "<th>Examiner</th>"
+ "<th>availableID </th>"
+ "<th>Time</th>"
+ "</tr>");
// now loop through students array and print details here...
最后根据您的输出,由于您不断获得相同的值,因此我认为以下其中一项存在问题:
您正在遍历的数据
您正在遍历
studentID
数组,但似乎并没有遍历包含要在表上显示的数据的数据结构这一事实(如果您可以弄清楚free
表示什么将有所帮助)for loop
中的以下语句。// most likely they'll have the same value!!
String SVavailableID = free.getAvailableID();
String EXavailableID = free.getAvailableID();
在打印
html
之前,您正在比较它们的值,但是这些语句为这些ID分配了相同的值;除非您使用getAvailableID()
方法实现了某种逻辑,否则它们将不会返回不同的结果。编辑:我只是读了您对答案的评论,在其中您解释了如何为每个可用ID拥有单独的表
我将尝试草拟一个伪代码算法来做到这一点
// loop through each available ID
for(String ID : availableIdCollection){
// print table headers here
// loop through students array
for(Student s : studentCollection){
// print students data here
}
}
您基本上会有两个嵌套的for循环。
在外部循环中,您将遍历可用的ID
在内部循环之前,您将打印表头
打印表格标题后,您需要遍历Student数组并打印每个学生数据