-1

searchUser メソッドに arrayLists (personalList,c1List,c2List) の arrayList (mainList) があります。

  public List<List<UserApplication>> searchUser(EdsStudentForm eds) throws Exception {

    //My arraylist constructors    
    List<List<UserApplication>> mainList = new ArrayList<List<UserApplication>>();
    List<UserApplication> personalList = new ArrayList<UserApplication>();
    List<UserApplication> c1List = new ArrayList<UserApplication>();
    List<UserApplication> c2List = new ArrayList<UserApplication>();
    List<UserApplication> c3List = new ArrayList<UserApplication>();

    String searchPersonalQuery = "SELECT studentCode,title,firstName,lastName,"
            + "streetNumber,streetName,suite,city,province,country,postalCode,email,"
            + "workPhone,cellPhone,homePhone,sin "
            + "FROM studtregister_personal WHERE studentCode=?";
    String searchCourse1Query = "SELECT programCode1,lang1,schDays1,schTime1,schType1,"
            + "totalHours1,startDate1,pricetype1,price1 "
            + "FROM studtregister_course1 WHERE studentCode=?";
    String searchCourse2Query = "SELECT programCode2,lang2,schDays2,schTime2,schType2,"
            + "totalHours2,startDate2,pricetype2,price2 "
            + "FROM studtregister_course2 WHERE studentCode=?";
    String searchCourse3Query = "SELECT programCode3,lang3,schDays3,schTime3,schType3,"
            + "totalHours3,startDate3,pricetype3,price3 "
            + "FROM studtregister_course3 WHERE studentCode=?";

    int stCode = eds.getStudentCode();

    try {
        currentCon = ConnectionManager.getDBConnection();
        PreparedStatement pst1 = currentCon.prepareStatement(searchPersonalQuery);
        pst1.setInt(1, stCode);
        rs = pst1.executeQuery();

        while (rs.next()) {
            UserApplication personBean = new UserApplication();
            personBean.setStudentCode(rs.getInt(1));
            personBean.setTitle(rs.getString(2));
            personBean.setFirstName(rs.getString(3));
            personBean.setLastName(rs.getString(4));
            personBean.setStreetNumber(rs.getString(5));
            personBean.setStreetName(rs.getString(6));
            personBean.setSuite(rs.getString(7));
            personBean.setCity(rs.getString(8));
            personBean.setProvince(rs.getString(9));
            personBean.setCountry(rs.getString(10));
            personBean.setPostalCode(rs.getString(11));
            personBean.setEmail(rs.getString(12));
            personBean.setWorkPhone(rs.getString(13));
            personBean.setCellPhone(rs.getString(14));
            personBean.setHomePhone(rs.getString(15));
            personBean.setSin(rs.getString(16));
            personalList.add(personBean);
        }

        pst1.close();

        currentCon = ConnectionManager.getDBConnection();
        PreparedStatement pst2 = currentCon.prepareStatement(searchCourse1Query);
        pst2.setInt(1, stCode);
        rs = pst2.executeQuery();

        while (rs.next()) {
            UserApplication C1Bean = new UserApplication();
            C1Bean.setProgramCode1(rs.getString(1));
            C1Bean.setLanguage1(rs.getString(2));
            C1Bean.setScheduleDay1(rs.getString(3));
            C1Bean.setScheduleTime1(rs.getString(4));
            C1Bean.setScheduleType1(rs.getString(5));
            C1Bean.setTotalHours1(rs.getString(6));
            C1Bean.setStartDate1(rs.getString(7));
            C1Bean.setPriceType1(rs.getString(8));
            C1Bean.setPrice1(rs.getString(9));
            c1List.add(C1Bean);
        }

        pst2.close();

        currentCon = ConnectionManager.getDBConnection();
        PreparedStatement pst3 = currentCon.prepareStatement(searchCourse2Query);
        pst3.setInt(1, stCode);
        rs = pst3.executeQuery();

        while (rs.next()) {
            UserApplication C2Bean = new UserApplication();
            C2Bean.setProgramCode2(rs.getString(1));
            C2Bean.setLanguage2(rs.getString(2));
            C2Bean.setScheduleDay2(rs.getString(3));
            C2Bean.setScheduleTime2(rs.getString(4));
            C2Bean.setScheduleType2(rs.getString(5));
            C2Bean.setTotalHours2(rs.getString(6));
            C2Bean.setStartDate2(rs.getString(7));
            C2Bean.setPriceType2(rs.getString(8));
            C2Bean.setPrice2(rs.getString(9));
            c2List.add(C2Bean);
        }

        pst3.close();

        currentCon = ConnectionManager.getDBConnection();
        PreparedStatement pst4 = currentCon.prepareStatement(searchCourse3Query);
        pst4.setInt(1, stCode);
        rs = pst4.executeQuery();

        while (rs.next()) {
            UserApplication C3Bean = new UserApplication();
            C3Bean.setProgramCode3(rs.getString(1));
            C3Bean.setLanguage3(rs.getString(2));
            C3Bean.setScheduleDay3(rs.getString(3));
            C3Bean.setScheduleTime3(rs.getString(4));
            C3Bean.setScheduleType3(rs.getString(5));
            C3Bean.setTotalHours3(rs.getString(6));
            C3Bean.setStartDate3(rs.getString(7));
            C3Bean.setPriceType3(rs.getString(8));
            C3Bean.setPrice3(rs.getString(9));
            c3List.add(C3Bean);
        }

        pst4.close();

        if(personalList != null && !personalList.isEmpty()) {
            mainList.add(personalList);
        }
        if(c1List != null && !c1List.isEmpty()) {
            mainList.add(c1List);
        }
        if(c2List != null && !c2List.isEmpty()) {
            mainList.add(c2List);
        }
        if(c3List != null && !c3List.isEmpty()) {
            mainList.add(c3List);
        }
    } catch (SQLException ee) {
        System.out.println("Unable to connect to database:student_registration");
        ee.printStackTrace();
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (currentCon != null) {
                currentCon.close();
            }
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
    }
    return mainList;
}

私のStrutsアクションクラスでは、mainList arrayListをセッションに入れました:

  public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request,               HttpServletResponse response)
        throws Exception {

    HttpSession session = request.getSession(true);

    if (null == session.getAttribute("username")) {
        response.sendRedirect("login.jsp");
    } else {
        EdsStudentForm eds = (EdsStudentForm) form;
        try {
            List<List<UserApplication>> mainList = uaDAO.searchUser(eds);
            if (!mainList.isEmpty()) {
                request.getSession().setAttribute("mainList", mainList);
                action_forward = EDITSUCCESS;
            } else {
                action_forward = EDITFAILURE;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   return mapping.findForward(action_forward);
}

ただし、次のコードを使用して、jsp ファイルの arrayList を反復処理しようとすると:

    <html:form method="post">
        <table>
            <c:forEach items="${mainList}" var ="uList">
                <c:forEach items="${uList}" var="pList">
                <tr> 
                    <td><label>Student Code : </label></td>
                    <td><a href="editStudt.jsp"><c:out value="${pList.studentCode}"></c:out></a></td>
                    </tr>
                    <tr>
                        <td><label>First Name : </label></td>
                        <td><c:out value="${pList.firstName}"></c:out></td>
                    </tr>
                    <tr>
                        <td><label>Last Name : </label></td>
                        <td><c:out value="${pList.lastName}"></c:out></td>

                    </tr> 
                </c:forEach>
            </c:forEach>
      </table>
        <input type="button" class="button" value="Main Menu" onclick="doMenu()"/>
    </html:form>

正しい情報が出力されます... 3 - 4 回 (mainList に 3 つまたは 4 つの arrayLists があるかどうかによって異なります)。

  The output :

  Student code : 900
  First Name : XYZ
  Last Name : XYZ

  Student code : 900
  First Name : XYZ
  Last Name : XYZ

  Student code : 900
  First Name : XYZ
  Last Name : XYZ

私が間違っていることを教えてください。

4

2 に答える 2

0

のインスタンスは 1 つだけですUserApplication:

UserApplication sBean = new UserApplication();
while (rs.next()) {
    ...

結果セットのアイテムごとに新しい ものを作成する必要がありますUserApplication

while (rs.next()) {
    UserApplication sBean = new UserApplication();
    ...

そのため、同じデータを複数回表示することについて質問しましたが、これが実際のコードである場合はそうである必要があります。インスタンスのデータを変更し、同じ Beanをリストに再度追加するだけです。

于 2013-03-07T18:02:04.823 に答える
0

最初のリストに 3 つの変数を追加したため

于 2013-03-07T09:35:49.677 に答える