Отображение списка объектов из класса в Jsp

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

Под кодом:

Jsp

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

ИЗМЕНИТЬ:

Я обновил код, однако я не возвращаю никаких значений в список жертв, ничего не печатается на jsp. Остальные элементы получают данные. Я не уверен, правильно ли написан 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());
    }       
}   

Преступление.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;

..........

Граждане.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)

person devdar    schedule 11.04.2013    source источник


Ответы (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\work\Catalina\localhost\myAppName\org\apache\jsp\

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

РЕДАКТИРОВАТЬ: это должно быть так

<c:forEach items="${crimes.victims}" var="victim">
            <label>${victim.name}</label>       
</c:forEach>
person Hardik Mishra    schedule 11.04.2013
comment
Я сделал это, однако данные не были возвращены, они кажутся нулевыми, и в этой базе данных есть данные. Я не уверен, что ResultSetExtractor был правильно написан для элементов списка. - person devdar; 11.04.2013
comment
Я сделал ${crime.victims.size()}, и он вернул 0, поэтому я предполагаю, что ResultSetExtractor был неправильно настроен для элементов списка. Можете ли вы помочь здесь - person devdar; 11.04.2013
comment
@dev_darin: Ну, я никогда не работал с ResultSetExtractor . По крайней мере, теперь ошибка исчезла :) - person Hardik Mishra; 11.04.2013
comment
@dev_darin: проверьте, оценивается ли if(socialSecurityNumber > 0 & citizenTypeId == 3){ как истина. - person Hardik Mishra; 11.04.2013
comment
Хорошо, нет, он не оценивался как true, изменит это и посмотрит, попадет ли он. - person devdar; 11.04.2013
comment
Я думаю, что проблема в запросе, тип преступления показывает то же самое для всех записей. - person devdar; 11.04.2013

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

person Ray Stojonic    schedule 11.04.2013