[英]HashMap in JSF not showing the value if the key is a non standard Object
我有一個看起來像這樣的HashMap:
HashMap<QualifiedProduct,List<Date>
所以我的java代碼看起來像這樣:
@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;
}
正如我在stackoverflow上閱讀的許多其他文章一樣,或者在 這里 ,在JSF 1.2中顯示它的最好方法是使用良好的舊jsp標記<c:forEach
所以我用我的代碼:
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>
JSF輸出為:
com.dw.model.QualifiedProduct@15d97b65 [abstractProductId = 2,abstractProductCode = 2-2,abstractProductName = 2,abstractProductTypeName = type2,qualificationsCount = 2,customersCount = 2,qualificationDueDate = Thu Jun 11 14:47:37 CEST 2015,id =,version =,created =,modified =],其值為:
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 =],其值為:
com.dw.model.QualifiedProduct@79342f17 [abstractProductId = 3,abstractProductCode = 3-3,abstractProductName = 3,abstractProductTypeName = type3,qualificationsCount = 3,customersCount = 3,qualificationDueDate = Thu Jun 11 14:47:37 CEST 2015,id =,version =,created =,modified =],其值為:
因此,該值始終為空。
但是如果我使用像這樣的HashMap<String,List<Date>>
一切正常:
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;
}
結果是:
兩個,值是:[2015年6月11日星期四,2015年6月11日星期四14:54:22 CEST,2015年6月11日星期四14:54:22]
一個值是:[CEST 2015年6月11日星期四,CEST 2015年6月11日星期四14:54:22,CEST 2015年6月11日星期四14:54:22]
三,值是:[2015年6月11日星期四,2015年6月11日星期四14:54:22,2015年6月11日星期四14:54:22]
使用非標准對象作為鍵的區別在哪里???
更改問題時更新答案。
如果要將自定義對象用作HashMap
鍵,則必須在自定義對象中重寫hashCode()
和equals()
方法。 這是如何做的例子。
檢查jsp中列表大小的先前答案(原始問題。)
嘗試使用${fn:length(myItem.value)}
檢查列表大小。 為此,請在您的jsp中添加<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
EL在吸氣劑和吸氣劑上工作。 如果正在執行list.size
,它將在List
對象上查找方法list.getSize()
,該方法不存在。 它有list.size()
代替。 因此,我們必須使用此jstl函數來檢索列表的大小。
據我所知,forEach不適用於非Java標准對象。 最好是做一個包裝課
public class QualificationProductWithListOfOrderingMailingDate {
private HashMap<QualifiedProduct,List<Date>> qualificationProductWithListOfOrderingMailingDate;
public HashMap<QualifiedProduct,List<Date>> getQualificationProductWithListOfOrderingMailingDate() {
return qualificationProductWithListOfOrderingMailingDate;
}
public void setQualificationProductWithListOfOrderingMailingDate(
HashMap<QualifiedProduct,List<Date>> qualificationProductWithListOfOrderingMailingDate) {
this.qualificationProductWithListOfOrderingMailingDate = qualificationProductWithListOfOrderingMailingDate;
}
}
遍歷每個產品完全沒有問題:
<ui:repeat var="x" value="#{testController.createAndReturnHashmap()}">
#{x.qualifiedProduct.abstractProductId},#{x.qualifiedProduct.abstractProductCode}
<ui:repeat var="dt" value="#{x.dates}">
#{dt}
</ui:repeat>
</ui:repeat>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.