java - 如何让 Accordion 正确显示动态信息

标签 java jquery jsp

我有一个数据库,它按部分存储一些条目。每个部分都有多个小节,我想创建一个 Accordion 下拉列表以显示列表中的所有部分,当单击一个部分时,会显示其子部分。 例如: 第 1、2、3 节各有自己的 2 个小节(1.1、1.2、1.3 等)。我希望它们显示为 1、2、3,例如当我打开第 1 节时, Accordion 会显示第 1.1、1.2 小节和1.3.目前, Accordion 将第 1 节显示三次,每个条目都有自己的小节 1->1.1、1->1.2 和 1-1.3。这也适用于最后 2 部分。

我目前陷入困境,它没有按照我想要的方式显示部分:

String sql = "select * from sections inner join subsections on sections.id_section=subsections.id_section ";
ResultSet rs = s.executeQuery(sql);
while (rs.next())
{
    out.println("<div id='accordion-container'>" + "<h2 class='accordion-header'>" + rs.getString("section_name") + "</h2>");
}
while (rs.next()) {
    out.println("<div class='accordion-content'>" + rs.getString("subsection_name") + "</div>" + "</div>");
}
rs.close();
s.close();
con.close();

最佳答案

您的代码中有逻辑错误。第一个 while 结束后,rs 中就没有剩余的内容可以驱动第二个 while。我建议使用 2 个不同的变量 (sprev scurr) 来跟踪当前部分是否与前一个部分不同,并且仅当发生这种情况时才关闭当前部分并开始另一部分。首先用 0 之类的值初始化 2 个变量,然后在第一个 while 中使当前节 scurr = rs.getInt('id_section')。之后检查上一节是否与当前节不同。如果为 true,则检查上一节是否不为 0,如果为 true,则关闭该节 div。之后开始一个新的部分 div(在第一个 if 内)并打印出其名称。在 if 语句之外打印用于显示小节的代码。在结束当前 while 循环之前,使 sprev var 等于 scurr。

我为您准备了一个示例:

ResultSet srs = st.executeQuery("SELECT * FROM subsections inner join sections on         subsections.id_section=sections.id_section");

//variables for current and previous section ids (initially 0 = non-existent)
int idCurrentSection = 0;
int idPreviousSection = 0;

while (srs.next()) {
    idCurrentSection = srs.getInt("id_section"); //get and save the current section id
//if previous section is equal to current section we skip closing and opening a new     section block and just write the subsection name
    if(idCurrentSection!=idPreviousSection){ //if current section is different from previous section we need to start a new section block
        if(idPreviousSection != 0) //if previous section id is different from 0 we need to close the previous section block
            System.out.println("</div>");
        System.out.println("<div class='section'>"); //open a new section block
    }


    System.out.println("<p>"+srs.getInt("section_name")+"</p>");    //write the new section name

    System.out.println("<div class='subsection'>"); //start a new subsection
    System.out.println("<p>"+srs.getInt("subsection_name")+"</p>"); //write the subsection name
    System.out.println("</div>"); //inchid subsectiunea

    idPreviousSection = idCurrentSection; //previous section is now the current section

   }

System.out.println("</div>"); //careful to close the last section block

关于java - 如何让 Accordion 正确显示动态信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22909222/

相关文章:

jquery - FullCalendar突出显示行

java - 通过浏览器显示多个 PDF 文件的最佳方式是什么?

java - 如何转义url中的#符号?

java - 从根项目中的子项目获取依赖项

java - 将字符串合并为结构化字符串

Java OOP 概念

javascript - append() 仅第一次工作..当在同一个 div 上附加相同的代码时

jquery - 用面向对象的方法设置标签元素的属性

java - 使用 EL 调用列表中的方法

java - Heroku 和 Java : how to set utf-8 as the default encoding postgresql