合并JSP表中的重复行

时间:2016-06-29 07:38:13

标签: javascript jquery html jsp apache-poi

我尝试在JSP页面中使用Apache POI从输入Excel表格生成HTML表格。我已设法编写从Excel获取数据并显示为HTML表的部分,但问题是某些主要ID已在多行中重复,但它们在其他行中具有不同的值。例子(2姓不同姓氏的约翰斯):

<table>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>John</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
</table>   

生成表格的代码:

out.println("<table>");
while (rowIter.hasNext())
{
    row =(HSSFRow)rowIter.next();

        input_fname = row.getCell(0);
        input_lname = row.getCell(1);
        input_age = row.getCell(2);

         fname  = input_fname.getRichStringCellValue().getString();
         lname = input_lname.getRichStringCellValue().getString();
         age = input_age.getRichStringCellValue().getString();

         out.println("<tr>");
         out.println("<td>"+fname+"</td>");
         out.println("<td>"+lname+"</td>");
         out.println("<td>"+age+"</td>");
         out.println("</tr>");

    }
}   
out.println("</table>");

请有人告诉我如何根据主ID,名字合并重复的行,如下所示:

<table>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td rowspan="2">John</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>Doe</td>
<td>80</td>
</tr>
</table>   

我试过搜索类似的问题,但我找不到解决问题的方法,而且我是Javascript和JQuery的初学者(可能就是这个问题)。任何建议都非常感谢。提前谢谢!

2 个答案:

答案 0 :(得分:2)

你问的是错误的问题。首先正确编写HTML而不是尝试在HTML上进行某些合并会不会更容易?

因此,循环条目并将它们放入一些合适的数据结构中,例如由fname键入并以列表作为值的Map。 Person类是一个容纳数据的简单bean。

for(String key : people.keySet()){
    List<Person>  persons = people.get(key));
    int rowSpan = persons.size();

    //write the HTML accordingly.
} 

然后循环遍历此数据结构并编写HTML:

{{1}}

答案 1 :(得分:1)

你可以:

  • 在后端代码中打印名称时添加一个类,例如out.println("<td class="fname">"+fname+"</td>");
  • 然后使用jQuery

    var last_selected_name = "";
    
    /* Get all the first names cells */
    jQuery('td.fname').each(function(i,obj){
    current_name = jQuery(obj).text();  
    
    /* check for repeated names */
    if (current_name == last_selected_name)
    {
        jQuery("td.fname:contains('"+current_name+"')").each(function(index,object){
    
            if (index == 0)
            {
                /* check if already has rowspan attribtue */
                row_span = jQuery(object).attr('rowspan')?jQuery(object).attr('rowspan'):1;
    
                /* add one */
                row_span++;
    
                /* include the new rowspan number  */
                jQuery(object).attr('rowspan',row_span)
    
            }
            else
            {
                /* delete the other first name cells */
                jQuery(object).remove();
            }
        })
    }
    last_selected_name = current_name;
    })