当前位置:  开发笔记 > 编程语言 > 正文

在JSF + Facelets中迭代HashMap.values()

如何解决《在JSF+Facelets中迭代HashMap.values()》经验,为你挑选了1个好方法。

我正在使用JSF/Facelets,我正在尝试迭代一些我保留在HashMap中的Document对象(自定义对象).加载页面时,我收到错误"类型java.util.HashMap $ Values"中找不到"属性'名称".这是我的支持bean中的内容:

private Map documents = new HashMap();

public Collection getDocuments(){
    return documents.values();
}

在我的xhtml页面中:



    
         Name
         ${doc.name}
    

如果我将getDocuments函数更改为以下,它可以工作(意味着表显示没有错误),但我不知道为什么我需要将值放在JSF/Facelets页面的列表中才能正确显示.

public List getDocuments(){
    List rtrn = new ArrayList();
    for(Document doc : documents.values())
        rtrn.add(doc);
    return rtrn;
}

我不应该能够迭代收藏吗?



1> billjamesdev..:

好吧,事实证明,你不能只使用dataTable的任何类型的集合类型,并且有充分的理由.从MyFaces 1.2 Spec中,value属性必须是:

一个EL表达式,指定支持此表的数据模型.

EL表达式引用的值可以是任何类型.

直接使用DataModel类型的值.

型的阵列状参数Object[],java.util.List,java.sql.ResultSetjavax.servlet.jsp.jstl.sql.Result包裹在相应的DataModelthat知道如何在元件进行迭代.

其他值作为单行包装在DataModel中.

特别注意无序集合,例如Set不受支持.因此,如果值表达式引用了这样的对象,那么该表将被视为仅包含一个元素 - 集合本身.

从HashSet.values()返回的Collection不是有序的,因此不受支持.如果是,您不知道表格中的行将以什么顺序输出,并且页面的刷新可以随机重新排序.不好.

您收到的错误是,从最后一段开始,它表示数据表将您的Collection视为行对象,而Collection没有"name"属性.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有