Java 在JSF+;小脸
我使用的是JSF/Facelets,我试图迭代保存在HashMap中的一些文档对象(自定义对象)。加载页面时,我得到错误“在java.util.HashMap$Values类型上找不到属性'name'。以下是我的支持bean中的内容:Java 在JSF+;小脸,java,jsf,datatable,Java,Jsf,Datatable,我使用的是JSF/Facelets,我试图迭代保存在HashMap中的一些文档对象(自定义对象)。加载页面时,我得到错误“在java.util.HashMap$Values类型上找不到属性'name'。以下是我的支持bean中的内容: private Map<String, Document> documents = new HashMap<String, Document>(); public Collection<Document> getDocumen
private Map<String, Document> documents = new HashMap<String, Document>();
public Collection<Document> getDocuments(){
return documents.values();
}
private Map documents=new HashMap();
公共收集文件(){
返回文档。值();
}
在我的xhtml页面中:
<h:dataTable id="documentTable"
value="#{DocumentManager.allDocuments}"
var="doc" rowClasses="list-row-odd, list-row-even"
headerClass="table-header" styleClass="bordered">
<h:column id="col_name">
<f:facet name="header">Name</f:facet>
${doc.name}
</h:column>
</h:dataTable>
名称
${doc.name}
如果我将getDocuments函数更改为以下内容,它就可以正常工作(意味着表的显示不会出错),但我不确定为什么需要将值放入列表中,以便JSF/Facelets页面正确显示
public List<Document> getDocuments(){
List<Document> rtrn = new ArrayList<Document>();
for(Document doc : documents.values())
rtrn.add(doc);
return rtrn;
}
公共列表getDocuments(){
List rtrn=new ArrayList();
对于(文档文档:documents.values())
rtrn.add(doc);
返回rtrn;
}
难道我不应该遍历集合吗?事实证明,不能对dataTable使用任何类型的集合类型,这是有充分理由的。从中,值属性必须为: 一个EL表达式,用于指定 支持此表的数据模型 EL引用的值 表达式可以是任何类型
- 直接使用DataModel类型的值
、Object[]
、java.util.List
或java.sql.ResultSet
类型的类似数组的参数封装在相应的DataModel中,该DataModel知道如何迭代元素javax.servlet.jsp.jstl.sql.Result
- 其他值作为单行包装在数据模型中
Set
。因此,如果值表达式引用这样一个对象,那么表将被视为只包含一个元素——集合本身
从HashSet.values()返回的集合没有排序,因此不受支持。如果是这样,您就不知道表中的行的输出顺序,页面刷新可能会随机地对它们重新排序。不太好
您得到的错误是,从上一段开始,它说datatable将您的集合视为行对象,并且集合没有“name”属性。另外,我认为您可以调用:return new ArrayList(document.values())