2013-04-11 5 views
1

Я использую Spring MVC и i реализовал ResultSetExtractor, так как один из моих классов имел сложный объект списка. Я сделал сопоставления, а затем сделал выбор из базы данных. У меня возникают проблемы с отображением данных из элементов списка в ResultSetExtractor. Я надеюсь, что правильно сделал картографию. Другие атрибуты имеют данные. Проблема отображает значения из Listvictims и Listcriminals в jsp.Отображение списка объектов из класса В Jsp

Под это код:

Jsp

Я получаю данные в crimeRecNo и crimeDetails однако не в жертву.

EDIT:

Я обновил код, однако я не получаю значения обратно в списке жертв ничего не печатается на СПЯ. Другие элементы получают данные. Я не уверен, правильно ли был создан ResultSetExtractor для элементов списка.

<form:form id="crimeList" name ="crimeList"> 
    <div id ="content"> 
     <c:forEach items="${crimes}" var="crime"> 
      <div id="table">   

       <label>${crime.crimeRecNo}</label> 
       <label>${crime.crimeDetails}</label> 

       <c:forEach items="${crime.victims}" var="victim"> 
        <label>${victim.fName}</label>  
       </c:forEach> 

      </div> 
     </c:forEach> 
    </div> 
</form:form> 

ResultSetExtractor Отображение

Пожалуйста, поправьте меня, если я сделал отображение неправильно

private static final class CrimeMapper implements ResultSetExtractor<List<Crime>>{ 

    public List<Crime> extractData(ResultSet rs) throws SQLException, DataAccessException { 

     Map<Integer, Crime> map = new HashMap<Integer, Crime>(); 
     Crime crime = null; 

     while (rs.next()){ 

      int crimeRecNo = rs.getInt("crimeRecNo"); 
      crime = map.get(crimeRecNo); 
      if (crime == null){ 
       crime = new Crime(); 
       crime.setCrimeRecNo(crimeRecNo); 
       crime.setCrimeDate(rs.getString("crimeDate")); 
       crime.setCrimeDetails(rs.getString("crimeDetails")); 
       crime.setCrimeStreetLn1(rs.getString("crimeStreetLn1")); 
       crime.setCrimeStreetLn2(rs.getString("crimeStreetLn2")); 
       crime.setCrimeLatLocation(rs.getBigDecimal("crimeLatLocation")); 
       crime.setCrimeLongLocation(rs.getBigDecimal("crimeLongLocation")); 
       crime.setCrimeTime(rs.getString("crimeTime")); 
       crime.setInvestigatingOfficerId(rs.getString("investigatingOfficerId")); 
       crime.setCrimeLevelId(rs.getInt("crimeLevelId")); 
       crime.setOffenceCatId(rs.getInt("offenceCatId")); 
       crime.setOffenceTypeId(rs.getInt("offenceTypeId")); 
       crime.setStatusId(rs.getInt("statusId")); 
       crime.setRecordedById(rs.getString("recordedById")); 
       crime.setVictims(new ArrayList<Citizens>()); 
       crime.setCriminals(new ArrayList<Citizens>()); 
       map.put(crimeRecNo, crime); 
      } 

      Integer socialSecurityNumber = rs.getInt("socialSecurityNumber"); 
      Integer citizenTypeId = rs.getInt("citizenTypeId"); 
      if(socialSecurityNumber > 0 & citizenTypeId == 3){ 
       Citizens victims = new Citizens(); 
       victims.setAddLn1(rs.getString("addLn1")); 
       victims.setAddLn2(rs.getString("addLn2")); 
       victims.setAddLn3(rs.getString("addLn3")); 
       victims.setCitizenTypeId(rs.getInt("citizenTypeId")); 
       victims.setCountryId(rs.getInt("countryId")); 
       victims.setEthnicityId(rs.getInt("ethnicityId")); 
       victims.setfName(rs.getString("fName")); 
       victims.setGenderId(rs.getString("genderId")); 
       victims.setHairColorId(rs.getString("hairColorId")); 
       victims.setHeight(rs.getDouble("height")); 
       victims.setlName(rs.getString("lName")); 
       victims.setMaritalStatusId(rs.getInt("maritalStatusId")); 
       victims.setNoticeableFeatures(rs.getString("noticableFeatures")); 
       victims.setOccupationId(rs.getInt("occupationId")); 
       victims.setoName(rs.getString("oName")); 
       victims.setPhoneNo(rs.getString("phoneNo")); 
       victims.setPhoto(rs.getString("photo")); 
       victims.setSkinColorId(rs.getString("skinColorId")); 
       victims.setSocialSecurityNumber(rs.getInt("socialSecurityNumber")); 
       victims.setWeight(rs.getDouble("weight")); 
       victims.setEyeColorId(rs.getString("eyeColorId")); 
       victims.setDob(rs.getDate("dob")); 
       victims.setName(rs.getString("fName") +" "+ rs.getString("lName")); 

       crime.getVictims().add(victims); 
      } else if(socialSecurityNumber > 0 & citizenTypeId == 2){ 
       Citizens criminal = new Citizens(); 
       criminal.setAddLn1(rs.getString("addLn1")); 
       criminal.setAddLn2(rs.getString("addLn2")); 
       criminal.setAddLn3(rs.getString("addLn3")); 
       criminal.setCitizenTypeId(rs.getInt("citizenTypeId")); 
       criminal.setCountryId(rs.getInt("countryId")); 
       criminal.setEthnicityId(rs.getInt("ethnicityId")); 
       criminal.setfName(rs.getString("fName")); 
       criminal.setGenderId(rs.getString("genderId")); 
       criminal.setHairColorId(rs.getString("hairColorId")); 
       criminal.setHeight(rs.getDouble("height")); 
       criminal.setlName(rs.getString("lName")); 
       criminal.setMaritalStatusId(rs.getInt("maritalStatusId")); 
       criminal.setNoticeableFeatures(rs.getString("noticableFeatures")); 
       criminal.setOccupationId(rs.getInt("occupationId")); 
       criminal.setoName(rs.getString("oName")); 
       criminal.setPhoneNo(rs.getString("phoneNo")); 
       criminal.setPhoto(rs.getString("photo")); 
       criminal.setSkinColorId(rs.getString("skinColorId")); 
       criminal.setSocialSecurityNumber(rs.getInt("socialSecurityNumber")); 
       criminal.setWeight(rs.getDouble("weight")); 
       criminal.setEyeColorId(rs.getString("eyeColorId")); 
       criminal.setDob(rs.getDate("dob")); 
       criminal.setName(rs.getString("fName") +" "+ rs.getString("lName")); 
       crime.getCriminals().add(criminal);     
      }    
     }   
     return new ArrayList<Crime>(map.values()); 
    }  
} 

Crime.java

public class Crime implements Serializable{ 

    private int crimeRecNo; 
    private String crimeDetails; 
    private BigDecimal crimeLatLocation; 
    private BigDecimal crimeLongLocation; 
    private String crimeStreetLn1; 
    private String crimeStreetLn2; 
    private String crimeDate; 
    private String crimeTime; 
    private List<Citizens> victims; 
    private List<Citizens> criminals; 
    private String recordedById; 
    private int statusId; 
    private int offenceCatId; 
    private int offenceTypeId; 
    private int crimeLevelId; 
    private String investigatingOfficerId; 

....... ...

Citizens.java

public class Citizens implements Serializable{ 

    private int socialSecurityNumber; 
    private String fName; 
    private String lName; 
    private String oName; 
    private String photo; 
    private int countryId; 
    private String addLn1; 
    private String addLn2; 
    private String addLn3; 
    private String genderId; 
    private int ethnicityId; 
    private String skinColorId; 
    private String hairColorId; 
    private int occupationId; 
    private String phoneNo; 
    private int maritalStatusId; 
    private String noticeableFeatures; 
    private double weight; 
    private double height; 
    private int citizenTypeId; 
    private String eyeColorId; 
    private Date dob; 
    private String name; 

Ошибка

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/crimeList.jsp at line 62 

59:  <label>${crime.crimeRecNo}</label> 
60:  <label>${crime.crimeDetails}</label> 
61:   
62:  <c:forEach items="${crimes.getVictims}" var="victim"> 
63:  <label>${victim.getName}</label> 
64:   
65:  </c:forEach> 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

root cause 

java.lang.NumberFormatException: For input string: "getVictims" 
    java.lang.NumberFormatException.forInputString(Unknown Source) 
    java.lang.Integer.parseInt(Unknown Source) 
    java.lang.Integer.parseInt(Unknown Source) 
    javax.el.ListELResolver.coerce(ListELResolver.java:173) 
    javax.el.ListELResolver.getValue(ListELResolver.java:52) 
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:183) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_c_005fforEach_005f1(crimeList_jsp.java:249) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_c_005fforEach_005f0(crimeList_jsp.java:216) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_form_005fform_005f0(crimeList_jsp.java:164) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspService(crimeList_jsp.java:127) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

ответ

2

Каждый JSP-файл при первом доступе или при его модификации позже компилируется, и каждый JSP-файл будет чем-то вроде crimeList_jsp.java.

org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_c_005fforEach_005f1(crimeList_jsp.java:249) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_c_005fforEach_005f0(crimeList_jsp.java:216) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspx_meth_form_005fform_005f0(crimeList_jsp.java:164) 
    org.apache.jsp.WEB_002dINF.jsp.crimeList_jsp._jspService(crimeList_jsp.java:127) 

Я предлагаю вам наблюдать код выше строки для crimeList.jsp в вашем Apache Tomcat.

Путь образец будет выглядеть так:

D: \ Apache-Tomcat \ работа \ Catalina \ локальный \ myAppName \ орг \ Apache \ JSP \

Здесь myAppName будет ваш Имя приложения.

EDIT: Это должно быть, как это

<c:forEach items="${crimes.victims}" var="victim"> 
      <label>${victim.name}</label>  
</c:forEach> 
+0

Я сделал это, однако никаких данных было возвращено, кажется, быть пустым и эта база данных содержит данные. Я не уверен, правильно ли был создан ResultSetExtractor для элементов списка. – devdar

+0

Я сделал $ {crime.victims.size()}, и он вернул 0, поэтому я думаю, что ResultSetExtractor был настроен неправильно для элементов списка. Вы можете помочь здесь – devdar

+0

@dev_darin: Ну, я никогда не работал с 'ResultSetExtractor'. По крайней мере, теперь ошибка исчезла. –

1

Вместо crimes.getVictims, это должно называться crimes.victims, то EL будет заботиться о вставке получить часть (справа теперь он ищет getGetVictims)

Смежные вопросы