I have a HashMap which looks like this:
HashMap<QualifiedProduct,List<Date>
so my java code looks like this:
@Name("testController")
@AutoCreate
public class TestController {
public HashMap<QualifiedProduct, List<Date>> createAndReturnHashmap(){
HashMap<QualifiedProduct, List<Date>> hm = new HashMap<QualifiedProduct, List<Date>>();
QualifiedProduct q1= new QualifiedProduct();
q1.setAbstractProductId(1);
q1.setAbstractProductCode("1-1");
q1.setAbstractProductName("one");
q1.setAbstractProductTypeName("type1");
q1.setCustomersCount(1);
q1.setQualificationDueDate(new Date());
q1.setQualificationsCount(1);
QualifiedProduct q2= new QualifiedProduct();
q2.setAbstractProductId(2);
q2.setAbstractProductCode("2-2");
q2.setAbstractProductName("two");
q2.setAbstractProductTypeName("type2");
q2.setCustomersCount(2);
q2.setQualificationDueDate(new Date());
q2.setQualificationsCount(2);
QualifiedProduct q3= new QualifiedProduct();
q3.setAbstractProductId(3);
q3.setAbstractProductCode("3-3");
q3.setAbstractProductName("three");
q3.setAbstractProductTypeName("type3");
q3.setCustomersCount(3);
q3.setQualificationDueDate(new Date());
q3.setQualificationsCount(3);
List<Date> dt = new ArrayList<Date>();
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
dt.add(d1);
dt.add(d2);
dt.add(d3);
hm.put(q1, dt);
hm.put(q2, dt);
hm.put(q3, dt);
return hm;
}
as i read in many other postings on stackoverflow like here,or here the best way to show it in JSF 1.2 is using the good old jsp tag <c:forEach
So i used in my code:
xmlns:c="http://java.sun.com/jstl/core"
.....
<c:forEach var="hm" items="${testController.createAndReturnHashmap()}">
${hm.key} <br/>
and value is: ${hm.value} <br/><br/>
</c:forEach>
The JSF output is:
com.dw.model.QualifiedProduct@15d97b65[abstractProductId=2,abstractProductCode=2-2,abstractProductName=two,abstractProductTypeName=type2,qualificationsCount=2,customersCount=2,qualificationDueDate=Thu Jun 11 14:47:37 CEST 2015,id=,version=,created=,modified=] and value is:
com.dw.model.QualifiedProduct@2393366a[abstractProductId=1,abstractProductCode=1-1,abstractProductName=one,abstractProductTypeName=type1,qualificationsCount=1,customersCount=1,qualificationDueDate=Thu Jun 11 14:47:37 CEST 2015,id=,version=,created=,modified=] and value is:
com.dw.model.QualifiedProduct@79342f17[abstractProductId=3,abstractProductCode=3-3,abstractProductName=three,abstractProductTypeName=type3,qualificationsCount=3,customersCount=3,qualificationDueDate=Thu Jun 11 14:47:37 CEST 2015,id=,version=,created=,modified=] and value is:
So the value is always empty.
but if i use a HashMap like this HashMap<String,List<Date>> everything works:
public HashMap<String, List<Date>> createAndReturnHashmap(){
HashMap<String, List<Date>> hm = new HashMap<String, List<Date>>();
List<Date> dt = new ArrayList<Date>();
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
dt.add(d1);
dt.add(d2);
dt.add(d3);
hm.put("one", dt);
hm.put("two", dt);
hm.put("three",dt);
return hm;
}
and the result is:
two and value is: [Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015]
one and value is: [Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015]
three and value is: [Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015, Thu Jun 11 14:54:22 CEST 2015]
Where is the differenct in using a non Standard object as a key???
Updating the answer as you changed the question.
If you want to use custom object as key in
HashMap, you have to overridehashCode()andequals()method in your custom object. here is the example of how to do that .Previous answer for checking size of list in jsp ( original question.)
Try using
${fn:length(myItem.value)}to check list size. For this add<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>in your jspEL works on getters and setter. If you are doing
list.size, it looks for a methodlist.getSize()onListobject, which is not there. It haslist.size()instead. So we have to use this jstl function to retrieve size of list.